Selenium 应用补充

本文最后更新于:2 年前

Selenium 应用补充

写在前面

在实际使用中一些基本的操作已经无法应用于反爬网站中,根据之前项目的经验,有了这篇文章。

CSS选择器

通常情况下我们可以根据元素 ID、CLASS属性、TAG名来选择元素。

如果没有以上特征,或许可以用Xpath的方式来解决,如果Xpath的路径也存在变化,可以使用CSS选择器。

1
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)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!