使用selenium库自动化访问网页
前言
本文只是自用笔记,是本人在写一些自动化脚本时,向各位前辈大佬学习后的总结。
安装
我的配置是Python + selenium + chromedriver:
Python
官网下载 Python ,需要python3
Selenium
使用pip下载:
pip3 install selenium
Chromedriver
- 安装Chrome浏览器
- 查询Chrome浏览器版本,在地址栏输入
chrome://version/
获取浏览器驱动版本,如:Google Chrome 96.0.4664.93 (正式版本) (64 位) (cohort: Stable)
- 在链接ChromeDriver 中找到对应版本的下载(可忽略最后一个小版本)
使用
Step 1 打开浏览器
执行下面的代码你就能成功地打开一个谷歌浏览器了
from selenium import webdriver
options = webdriver.ChromeOptions()
# using options.add_experimental_option(,) to add settings for browser
mypath = r'D:\chromedriver_win32\chromedriver.exe'
browser = webdriver.Chrome(executable_path = mypath, options = options)
当然,实际上executable_path
和options
都是非必要参数,不过我这里还是指定了这两个参数,executable_path
对应的是上一步下载的chromedriver的存放路径,如果不想设置需要设置环境变量,不然没有默认路径可以使用,options
对应浏览器的配置。
这边我只做了3个配置项,如下所示,分别实现了:允许登录;完成下载后不弹出消息;设置默认下载路径
options.add_experimental_option('excludeSwitches', ['enable-logging'])
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': r'D:\Download'}
options.add_experimental_option('prefs', prefs)
注意:每次对浏览器的设置都不会保存,下一次打开浏览器时,依然会是使用默认设置,因此无法使用打开浏览器手动设置后关闭浏览器以供下次使用的方法。
如果有其他项目需要设置,请查询百度或者官方API或者自行阅读源码
Step 2 访问网页
使用get函数实现网页的访问
#打开第一个网页
browser.get("https://www.baidu.com/")
#打开第二个网页
browser.get("https://www.csdn.net/")
还可以使用后退、前进以及刷新功能
#从csdn后退回百度
browser.back()
#从百度前进回csdn
browser.forward()
#刷新csdn页面
browser.refresh()
Step 3 查找页面元素
我们知道网页实际上就是讲html源码解析后可视化呈现给用户的结果,而且浏览器中是能够看见网页的html源码的,因此我们也能够通过源码,访问网页的任意一个角落。
使用开发者工具,打开element(元素)的页面,可以看到网页的源码,selenium提供了接口,能够通过element的各种属性来定位并返回element对象,使我们能够获取并操作我们想要的element。
如下所示,为访问element的基本接口:
- id定位
如下代码可以定位ID为’xx’的元素,并返回一个(所有)对象
ele = browser.find_element_by_id('xx')
eles = browser.find_elements_by_id('xx')
- name定位
如下代码可以定位name为‘xx’的元素,并返回一个(所有)对象
ele = browser.find_element_by_name('xx')
eles = browser.find_elements_by_name('xx')
- class定位
如下代码可以定位class name为’xx’的元素,并返回一个(所有)对象
ele = browser.find_element_by_class_name('xx')
eles = browser.find_elements_by_class_name('xx')
- tag定位
这里就需要解释一下tag,tag就是html定义代码段功能的标记,写在最前面,如:<div>、<input>、<body>、<td>
等都属于tag,如下代码会返回一个(所有)tag为div的元素
ele = browser.find_element_by_tag_name('div')
eles = browser.find_elements_by_tag_name('div')
- link定位
我们还可以通过超链接定位元素,如下代码可以返回一个(所有)超链接名称文本为’xx’的元素
ele = browser.find_element_by_link_text('xx')
eles = browser.find_elements_by_link_text('xx')
- 部分link定位
这是一种模糊查找方式,如下代码可以返回一个(所有)超链接名称文本中包含’xx’的元素
ele = browser.find_element_by_partial_link_text('xx')
eles = browser.find_elements_by_partial_link_text('xx')
- 路径定位
这是一种高级定位方法,有时,我们想要定位的元素结构非常奇怪缺少必要信息,让我们无从下手,这时可以直接使用路径,通过代码结构进行定位
ele = browser.find_element_by_xpath('./td[6]')
eles = browser.find_elements_by_xpath('./td')
- CSS定位
ele = browser.find_element_by_css_selector('#kw')
eles = browser.find_elements_by_css_selector('#kw')