selenium是python的非标准库,使用时需要下载安装
安装命令 pip install selenium
selenium是python的自动化测试模块,可以模拟浏览器的行为
所以在使用之前还要安装浏览器驱动,不同的版本对应不同的驱动文件,这里就不一一赘述了,网上相关的介绍有很多(主要是作者懒)
下载后将驱动文件放到添加过环境变量的路径,以便系统在使用时找到它,这里我把它放在了python的安装目录里
前戏部分就做完了,可以开始了
from selenium import webdriver
import time
# 创建Chrome对象
driver = webdriver.Chrome()
# 打开浏览器预设网址
driver.get('https://www.baidu.com')
# 通过id获取搜索框
input_ele = driver.find_element_by_css_selector('#kw')
# 模拟键盘操作 输入框输入内容
input_ele.send_keys("虞书欣")
# 模拟鼠标点击操作
driver.find_element_by_css_selector('#su').click()
# 延迟2秒,等待页面刷新完成
time.sleep(2)
a_ele = driver.find_element_by_css_selector('#content_left div.c-container a') # 解析页面元素 定位到目标链接
'''
中间遇到一个问题
使用id = 1定位时定位不到该节点,
a_ele = driver.find_element_by_css_selector('#content_left div#1 a')
报错:
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
开始想的时页面可能这个元素还没刷新完成,后来我页面延迟5秒后还是报错
然后我使用class定位,成功定位到该节点,然后获python基础教程取该节点的id,输出为:1
还是没搞懂为什么不能使用id定位到该节点,不知哪位大捞可以帮忙解读解读
原因是id为数字不符合python的命名规则…
‘’’
结合实例总结一下:
driver.find_element_by_css_selector('#content') 查找id为content的节点
driver.find_element_by_css_selector('.content') 查找class为content的节点
driver.find_element_by_css_selector('div#conten>a')
查找id为content的div的所有子节点为a标签的节点
driver.find_element_by_css_selector('div#conten a')
查找id为content的div的所有子孙节点为a标签的节点
driver.find_element_by_css_selector('#conten p:nth-child(2)')
查找id为content的节点中的其父元素的第二个子元素是p标签的节点,并不是指第二个p标签节点
driver.find_element_by_css_selector('#conten>p:nth-of-type(2)')
查找id为content的节点的第二个p标签节点
driver.find_element_by_css_selector('.content[name=value]')
查找class为content且name属性为value的所有节点
find_element_by_css_selector 返回匹配到的第一个节点
find_elements_by_css_selector 返回匹配到的所有节点,类型是list