Selenium 应用补充
写在前面
在实际使用中一些基本的操作已经无法应用于反爬网站中,根据之前项目的经验,有了这篇文章。
CSS选择器
通常情况下我们可以根据元素 ID、CLASS属性、TAG名来选择元素。
如果没有以上特征,或许可以用Xpath的方式来解决,如果Xpath的路径也存在变化,可以使用CSS选择器。
| elements = wd.find_elements(By.CSS_SELECTOR, '.animal')
|
使用浏览器中审查元素中,复制selector的功能可以简单的获取对应的元素。
模拟点击
Selenium内置ActionChains库可以实现对按钮模拟点击,悬浮,双击等操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from selenium import webdriver from selenium.webdriver.common.by import By
driver = webdriver.Chrome() driver.implicitly_wait(5)
driver.get('https://www.baidu.com/')
from selenium.webdriver.common.action_chains import ActionChains
ac = ActionChains(driver)
# 鼠标移动到 元素上 ac.move_to_element( driver.find_element(By.CSS_SELECTOR, '[name="tj_briicon"]') ).perform()
|
如果你想使用Dom操作实现模拟点击可以参考下面的网站:
关于dom事件:如何使用JavaScript模拟鼠标单击? | 码农家园 (codenong.com)
执行JS函数
我们可以直接让浏览器运行一段javascript代码,并且得到返回值,如下
1 2 3 4 5 6 7 8 9 10 11
| # 直接执行 javascript,里面可以直接用return返回我们需要的数据 nextPageButtonDisabled = driver.execute_script( ''' ele = document.querySelector('.soupager > button:last-of-type'); return ele.getAttribute('disabled') ''') # 返回的数据转化为Python中的数据对象进行后续处理 if nextPageButtonDisabled == 'disabled': # 是最后一页 return True else: # 不是最后一页 return False
|
使用Dom操作
如果使用一般的方式无法修改浏览器元素,可以在执行JS函数时候使用Dom操作。
1 2
| # 操作ID为password的对象,设置value值为123 document.getElementById("password").setAttribute("value","123")
|
写在后面
希望以上内容能让你更好的使用Selenium帮助你的工作。文本也参考许多文章,如下:
原理与安装 | 白月黑羽 (byhy.net)
实战技巧 | 白月黑羽 (byhy.net)
css表达式-上篇 | 白月黑羽 (byhy.net)
CSS 选择器参考手册 (w3school.com.cn)