从零开始学Python-使用Selenium抓取动态网页数据

从零开始学Python-使用Selenium抓取动态网页数据,第1张

AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。

因为传统的网页在传输数据格式方面,使用的是 XML 语法,因此叫做 AJAX ,其实现在数据交互基本上都是使用 JSON 。使用AJAX加载的数据,即使使用了JS将数据渲染到了浏览器中,在 右键->查看网页源代码 还是不能看到通过ajax加载的数据,只能看到使用这个url加载的html代码。

法1:直接分析ajax调用的接口。然后通过代码请求这个接口。

法2:使用Selenium+chromedriver模拟浏览器行为获取数据。

Selenium 相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。 chromedriver 是一个驱动 Chrome 浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:

现在以一个简单的获取百度首页的例子来讲下 Selenium 和 chromedriver 如何快速入门:

参考:Selenium的使用

直接直接分析ajax调用的接口爬取

selenium结合lxml爬取

1获取当前网页标题:String title=drivergetTitle();

2获取当前网页的URL:String url=drivergetCurrentUrl();

3获取元素的文本值,比如链接,纯文本等:String text=driverfindElement(By location)getText();

4获取元素指定属性的值:String attribute=driverfindElement(By location)getAttribute("属性"); //这里的参数可以是class、name等任意属性

5获取元素输入框内的文本值:String attribute=driverfindElement(By location)getAttribute("value");

6获取元素标签名称:String tagName=driverfindElement(By location)getTagName();

1是否显示:使用elementis_displayed()方法。

2是否存在:使用find_element_by_xxx()方法,捕获其抛出的异常, 如果存在异常的话则可以确定该元素不存在。

3是否被选中:一般判断表单元素,如radio或checkbox是否被选中,使用elementis_selected()方法( 返回true代表已被选中,返回false代表未被选中 )。

4是否有效:即是否为灰化状态,使用elementis_enabled()方法( 可用于判断button/checkbox/radio是否置灰 )。

用python 读取后生成DataFrame格式即可(pandas包)

例如读取到的df 中 列名分别为 订单编号 ,,状态

import pandas as pd

df = pdread_table('',sep='')#根据实际情况来

print(df[df['订单编号']=='12123123']]['状态']) 即可打印出该订单的状态

笔记:

01设置元素等待时间

自动化测试的时候,元素定位没有错,但是跑脚本的时候却报错了

例如,登录的时候要等登录页面加载出来才能输入用户名和密码

selenium设置元素等待时间的3种方式及区别

1sleep() --固定等待时间:强制等待,不能把握准确的等等时间,适合调试时用

2implicitly_wait() --隐式等待时间:等页面加载完成才执行下一步 *** 作,一般设置一次即可

3WebDriverWait --显示等待时间:配合untill()和not untill()方法,根据判断条件 灵活处理等待时间

要先设置一个超长时间,在这个时间内,程序根据调用频率每隔几秒查看一下,如果条件满足,则执行下一步 *** 作,若不满足且超过了等待时间则抛出异常

导包:from seleniumwebdriversupportui import WebDriverWait

使用:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常)until(要执行的方法, 超时时返回的错误信息)

实例:

replace:

02键盘事件Keys类

制表符:send_keys(KeysTAB)

退出键:send_keys(KeysESCAPE)

F1:send_keys(KeysF1)   f1~f12 以此类推

03二次定位

顾名思义,通过多个元素,定位两次

drfind_element(ByCLASS_NAME,"s_input")send_keys("python")

二次定位:

drfind_element(ByNAME,"query")find_element(ByCLASS_NAME,"s_input")send_keys("python")

04selenium鼠标悬停类-- ActionChains()

导包:from seleniumwebdrivercommonaction_chainsimport ActionChains

实例:将鼠标移动至更多设置,悬停鼠标

elem1= drfind_element(ByLINK_TEXT,"设置")

ActionChains(dr)move_to_element(elem1)perform()

05selenium警告框的处理

很多web应用经常会遇到JavaScript编写的alert 、confirm 以及prompt d窗,需要用到switch_toalert来切换d窗,并对d窗进行输入信息,关闭等处理。

switch_toalerttext  --获取d窗文本信息

switch_toalertaccept()  --点击d窗中确定按钮

switch_toalertdismiss()  --点击d出中取消按钮

switch_toalertsendKeys("字符串")  --在d窗中输入信息

实例:

06下拉菜单选择的三种方式

导包:from seleniumwebdriversupportuiimport Select

#选择下拉框的o2

elem1 = drfind_element(ByID,"s3Id")

1:根据value值定位

Select(elem1)select_by_value("o2val")

2根据index定位

Select(elem1)select_by_index(1)

3根据下拉框文本信息定位

Select(elem1)select_by_visible_text("o2")

07多窗口切换

window_handles --获取所有窗口句柄

switch_towindow(指定窗口) --切换到指定窗口

08selenium之JS *** 作浏览器滚动条位置

execute_script("windowscrollTo(0,n);")

09selenium之JS *** 作隐藏元素

隐藏元素的标识:style="display:none;"

一般我们通过将隐藏元素的属性修改成显示再定位

10 *** 作excel文件

将测试数据参数化用到

101准备参数化数据文件

102导包

打开文件,填写文档路径

运行结果:

定位到sheet的位置

读取sheet的行和列的内容

#读取表的行的方法

rows = sheet1nrows

print("行数",rows)

columns = sheet1ncols

print("列数",columns)

读取指定行的值

#读取指定行的值

rowValue1 = sheet1row_values(0)

print(rowValue1)

#读取指定列的值

colValue1 = sheet1col_values(0)

print(colValue1)

#输出所有用户名和对应的密码

for iin range(1,rows):

print("用户名:" + sheet1row_values(i)[0] +",密码:" + sheet1row_values(i)[1])

首先,并不是说你一打开一个页面就会产生一个session。

所谓session你可以这样理解:当你与服务端进行会话时,比如说登陆成功后,服务端会为你开壁一块内存区间,用以存放你这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,这个东西就是 session id ( jsessionid 只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),而这个内存区间你可以理解为session。

然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)

'''

options = webdriverChromeOptions()

optionsadd_argument('--headless') # 可以使用无头模式

driver = webdriverChrome(executable_path=CHROME_DRIVER_PATH, chrome_options=options)

driverget(URL) # 打开一个地址

cookie = driverget_cookies() #获取所有cookie列表

hsession = cookie[0]['value']

'''

在Chrome的开发者工具的application/cookie里面可以查到你要访问的session

招聘顺丰科技

测试工程师( 薪资15-25k)

岗位描述

以上就是关于从零开始学Python-使用Selenium抓取动态网页数据全部的内容,包括:从零开始学Python-使用Selenium抓取动态网页数据、selenium获取测试对象的内容和状态、selenium+python,关于表格 *** 作:想通过获取订单状态去点击订单编号,可以怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9618333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存