我们之前都是通过模拟浏览器,向服务器发送请求获取响应数据的,有些网站会校验你的浏览器,隐藏一些信息,这时候就需要用Selenium来处理(驱动一个真实的浏览器)。
以Chrome浏览器为例,查看浏览器版本,在谷歌浏览器驱动下载地址中下载相应版本和操作系统的驱动
下载成功后,解压称.exe文件放在项目工程目录下即可。不需要安装和运行。
之后在PyCharm pip install selenium库
可以分为三个步骤:
示例代码如下:
# (1)导入selenium from selenium import webdriver # (2)创建浏览器操作对象 path = 'chromedriver.exe' # 驱动的路径 browser = webdriver.Chrome(path) # (3)访问网站 url = 'https://www.jd.com' browser.get(url) # 打开网址 content = browser.page_source # 页面内容(源码) print(content)
元素定位:自动化要做的就是模拟鼠标和键盘来操作(点击输入等)这些元素(例如百度一下的搜索按钮)。操作这些元素的前提是要找到它们,webdriver提供了很多定位元素的方法。
注:selenium库更新了,从3.0版本升级到了4.0,所以以前的老函数弃用了,下面我会把新老函数一起记录下来。解决方案有两种:一是把最新下载的selenium库卸载,然后指定安装版本为3.0系列的,用老方法。二是使用新函数(推荐)。
老函数有以下六种
具体使用如下,以百度以下的输入框,搜索按钮和左上角的’视频’超链接为例
# 根据id寻找对象 button = browser.find_element_by_id('su') # 根据标签的属性值寻找对象 button = browser.find_element_by_name('wd') # 根据xpath语句获取对象 button = browser.find_element_by_xpath('//input[@id="su"]') # 根据标签的名字获取对象 button = browser.find_element_by_tag_name('input') # 根据前端的语法来获取对象 button = browser.find_element_by_css_selector('#su') # 根据链接的描述来获取对象 button = browser.find_element_by_link_text('视频')
我电脑上安装了最新的selenium库,新方法的用法也很简单
button = browser.find_element(By.ID, 'su') button = browser.find_element(By.NAME, 'wd') button = browser.find_element(By.XPATH, '//input[@id="su"]') button = browser.find_element(By.TAG_NAME, 'input') button = browser.find_element(By.CSS_SELECTOR, '#su') button = browser.find_element(By.LINK_TEXT, '视频') # 根据类名获取对象 button = browser.find_element(By.CLASS_NAME, 's_ipt')
示例如下:
# 获取标签属性 input_ = browser.find_element(By.ID, 'su') print(input_.get_attribute('value')) # 获取标签的名字 print(input_.tag_name) # 获取元素文本 a = browser.find_element(By.LINK_TEXT, '新闻') print(a.text)
输出结果:百度一下 input 新闻