今天带大家学习一下自动化框架selenium,有时候我们去编写爬虫时发现页面展示的html与我们爬取下来的页面数据不一样,有些是浏览器渲染,有些则是XHR数据不用刷新就来到我们页面了。那么碰到这么一个情况,我们就可以使用到我们的自动化框架selenium,虽然在许多有价值的网站我们都会被检测出来,但是哈哈,还是以一个学习的态度去看,还是很好玩,只是暂时,我们可能说没办法搞好这个不让浏览器检测出我们是自动化框架。好了,废话不多说,直接进入正题,开始我们的selenium的学习!
首先我们就是要装一个浏览器的驱动程序,这时我们的选择就是比较多了,谷歌,火狐,edge等等。大部分情况下我们就安装一个谷歌浏览器的驱动。首先查看一下自己谷歌浏览器的版本号:如我的是接下来就去CNPM Binaries Mirror这里下载一个与我们本身浏览器相同版本的驱动,然后解压到我们本地就可以啦,那么安装驱动就算是完成了!
后面我们就可以来编写代码了,今天就简简单单的来学习一些基本使用吧!
编写一个python程序,在开始我们还得安装一个驱动包
from selenium import webdriver
第一步创建一个浏览器对象:
driver=webdriver.Chrome(executable_path='C:\\Users\\user\\Desktop\\chromedriver-win32\\chromedriver-win32\\chromedriver.exe')
这里我解释一下,这个我们使用包webdriver创建一个Chrome浏览器对象,executable_path就是我们驱动的路径,这里就是我们那个安装谷歌浏览器驱动路径,如:
接下来就进行今天主要讲解,这么定位元素!
第一步driver.get(网站地址)
我们就是去请求我们想要网站的地址了,我们运行的话,谷歌浏览器就会自动去访问百度网首页!
第二步元素定位
这里提供了很多中方式定位元素:
最简单省事情的肯定是通过xpath路径定位,
driver.find_element_by_xpath(xpath路径)
我们可以直接打开开发者工具,找到我们要定位的元素,右键copy->xpath.
再把xpath粘贴上去即可,有时候这个xpath路径可能会变,或者找不到元素,因此最好自己编写xpath路径!
driver.find_element_by_id(元素id值)
这种定位方式就是通过元素id值定位,效果挺不错的,因为html中元素id具有唯一性!
driver.find_element_by_class_name(元素class属性的值)
这种定位方式就是通过元素class属性的值,定位到元素!
driver.find_elements_by_tag_name(标签名)
这种定位方式就是通过标签名称进行定位,但是由于是根据标签进行定位,所以可能会出现那种就是说一个页面有很多标签名一样的标签,如<div></div><div></div>.如果我们去定位div,我们就会定位到第一个div。
还有许多元素定位方式,这里就是照模子画瓢。我们可以通过css等一系列方法来定位元素。还有就是现在可能用我上述这些方法再python解释器中都会被画一个-------------,慢慢可能这些方法就不能使用,这是由于现在都集成在find_element方法中了!
driver.find_element()
给个例子吧
driver.find_element(By.XPATH,'//*[@id="verify-bar-close"]').click()
使用driver.find_element()方法之前还是需要导入另外一个包:
from selenium.webdriver.common.by import By
这里我就是还是根据xpath来定位元素,然后点击了一些我们定位的元素!
3第三步事件点击输入等
这里一般来说我们就是可能定位到元素就会进行一些列操作,如点击元素,输送数据给input元素等。学习了这个方法就可以进行登录操作了。
我们定位元素后就可以.click()点击或.sendkey('提交的文字')进行数据输入和点击!
例如
#定位到百度网的输入框 input=driver.find_element_by_xpath('//*[@id="kw"]') #定位到百度网的搜索按钮 submit=driver.find_element_by_xpath('//*[@id="su"]') #输入数据 input_key="python" input.send_keys(input_key) submit.click()
我们定位到了百度搜索的input输入元素,传送了python,然后定位了搜索按钮,然后点击,这样我们就可以自动搜索到我们想搜索的信息。
完整代码:
#导包 from selenium import webdriver #创建浏览器对象 driver=webdriver.Chrome(executable_path='C:\\Users\\user\\Desktop\\chromedriver-win32\\chromedriver-win32\\chromedriver.exe') #请求网页 driver.get('https://baidu.com') #定位元素 #定位到百度网的输入框 input=driver.find_element_by_xpath('//*[@id="kw"]') #定位到百度网的搜索按钮 submit=driver.find_element_by_xpath('//*[@id="su"]') #输入数据 input_key="python" input.send_keys(input_key) submit.click()
这里就是今天内容啦,可以自己动手试试,后续可以进行很多有意思的操作,但是请注意要遵守我们的法律和我们网络协议,不能去做那些违法犯罪的事情,本文仅仅是介绍自动化框架,如有侵权请联系我,马上下架!