Python+Selenium 元素获取及使用心得

Python+Selenium 元素获取及使用心得,第1张

1、获取输入框再输入信息的时候,发现send_keys会把内容输入到所获取输入框的隔壁框框(比如下一个框),排查一大通后发现,是因为待输入的数据前面包含个空格(这空格在Excel里还看不出来),send_keys方法会连空格也输入进去,元素定位并没有不准,这空格就是输入“跳框”的元凶。

解决的办法是检查待输入的源数据,strip去掉前后的空格。

2、直接定位元素的方法,比如Xpath和CSS Selector虽然方便,但是用多了程序健壮性会变差。想想也是,比如新开的页面里,按钮多一个少一个,或者顺序位置发生变化,元素就选错了,后面肯定就不按剧本走了。

这时候最好按id、class name来获取,如果不唯一,那就遍历循环判断(比如先找到父元素再遍历各个子元素),虽然程序运行效率会降低一些,但是程序跑起来的时候不容易挂。

关于效率问题其实也不用太纠结,我都纯用Selenium了我还在乎啥效率啊(手动狗头)

3、循环判断筛选元素的时候,get_attribute是个好东东,常见的比如text,scr,甚至onclick事件里的字符串都可以用来做判断。但是切记最好放在try里,遍历虽好,找到个空值就直接挂了。

知识点:

知识点:了解 driver对象的常用属性和方法

注意:最新版本的selenium已经取消了这种格式,取而代之的是:

你要先导入:

然后再:

知识点:掌握 driver对象定位标签元素获取标签对象的方法

代码实现,如下,获取腾讯新闻首页的新闻标签的内容。

知识点:掌握 元素对象的 *** 作方法

参考代码示例:

知识点:掌握 selenium控制标签页的切换

知识点:掌握 selenium控制frame标签的切换

知识点:掌握 利用selenium获取cookie的方法

知识点:掌握 selenium控制浏览器执行js代码的方法

知识点:掌握 手动实现页面等待

知识点:掌握 selenium开启无界面模式

知识点:了解 selenium使用**

知识点:了解 selenium替换user-agent

本章节主要内容:

switch_to适用场景:

处理JSd框

切换frame

切换浏览器窗口

Switch_to处理JSd框

JavaScript简称JS,应用于HTML网页,通过 *** 纵网页窗口及网页元素,从而实现动态效果。

JSd框类型:警告框alert、确认框confirm、提示框prompt

浏览器窗口中如果有JavaScript的d出框,需要通过switch_to语句处理。

相关方法:

Switch_to切换窗口

浏览器中有多个窗口时,如果想切换到其他窗口 *** 作,需要调用switch_to方法

切换到目标窗口:

相关方法:

示例:

Switch_to切换frame

如果元素在html的frame或iframe中,则无法直接定位到元素。需要先切换到该frame中,再进行定位及其他 *** 作。

相关方法:

一般来说我们与页面的交互可以使用WebElement的方法来进行点击等 *** 作。但是有时候我们需要一些更复杂的动作,就需要用到我们的Action Chains了。

通过action对象模拟鼠标 *** 作,如双击,右击,拖拽,悬停等 *** 作:

普通键:

有名按键:

无名按键:a-z,0-9

修饰键:

修饰键单独使用没有意义,一般和别的按键配合使用。

Actions *** 作:

使用示例

输入大写或按键上方的字符:

JS,JavaScript的简称,广泛用于HTML网页,通过 *** 纵网页窗口及网页元素,从而实现动态效果。

webdriver无法完成的 *** 作,可以由JS配合完成。

示例:

参考JS:

获取标题:documenttitle

d出提示框:alert('我是一个d框');

改变元素属性:q=documentgetElementById('kw');qstyledisplay='block';

Selenium-JS处理滚动条

通过js实现滚动条拖动效果:

移动元素到窗口顶部:

移动元素到窗口底部:

窗口移动指定距离:

移动窗口到某位置:

input标签上传:借用input元素的sendkeys方法实现

示例:

非input标签上传---借用其他工具如autoIt:

• 用于Windows GUI自动化 *** 作

• 通过它可以组合使用模拟键击、鼠标移动和窗口/控件 *** 作等来实现自动化任务。

• 它使用类似BASIC的脚本语言。

• 可以通过转换工具把脚本转换为exe文件

应用程序从安全考虑,都在登录或某 *** 作节点使用验证码。

验证码是一种区分用户是计算机还是人的公共全自动程序。

自动化时验证码处理方式:

cookie的 *** 作:

Selenium-截图 *** 作

截图:

# 定位 UI 元素 (WebElements)

find_element_by_id

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

# 获取元素数据

eleget_attribute('href')

eletext

eleinner

eleget_attribute('outerHTML')

eleget_attribute('innerHTML')

# 导入 ActionChains 类

from seleniumwebdriver import ActionChains

# 鼠标移动到 ac 位置

ac = driverfind_element_by_xpath('element')

ActionChains(driver)move_to_element(ac)perform()

# 在 ac 位置单击

ac = driverfind_element_by_xpath("elementA")

ActionChains(driver)move_to_element(ac)click(ac)perform()

# 在 ac 位置双击

ac = driverfind_element_by_xpath("elementB")

ActionChains(driver)move_to_element(ac)double_click(ac)perform()

# 在 ac 位置右击

ac = driverfind_element_by_xpath("elementC")

ActionChains(driver)move_to_element(ac)context_click(ac)perform()

# 在 ac 位置左键单击 hold 住

ac = driverfind_element_by_xpath('elementF')

ActionChains(driver)move_to_element(ac)click_and_hold(ac)perform()

# 将 ac1 拖拽到 ac2 位置

ac1 = driverfind_element_by_xpath('elementD')

ac2 = driverfind_element_by_xpath('elementE')

ActionChains(driver)drag_and_drop(ac1, ac2)perform()

# 导入 Select 类

from seleniumwebdriversupportui import Select

select = Select(driverfind_element_by_name('status')

selectselect_by_visible_text("审核不通过")

# 页面切换

driverswitch_towindow("window name")

#  *** 作页面的前进和后退

driverforward()  

driverback()

# 页面等待

## 隐式等待

driverimplicitly_wait(10)

## 显示等待

try: # 页面一直循环,直到 id="myElement" 出现

element = WebDriverWait(driver, 10)until(ECpresence_of_element_located((ByID, "myElement")))

finally:

driverquit()

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爬取

先将滚动条滚到适合的位置 ,再截图。这是滚动条滚动的代码。

public static void setScroll(WebDriver driver,int height){

try {

String setscroll = "documentdocumentElementscrollTop=" + height;

JavascriptExecutor jse=(JavascriptExecutor) driver;

jseexecuteScript(setscroll);

} catch (Exception e) {

Systemoutprintln("Fail to set the scroll");

}

}

以上就是关于Python+Selenium 元素获取及使用心得全部的内容,包括:Python+Selenium 元素获取及使用心得、从零开始学python爬虫(八):selenium提取数据和其他使用方法、自动化测试:Selenium高级 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存