遵化市城乡建设规划局网站,怎样用电脑和网訨自己做网站,去掉自动升级wordpress失败提示,wordpress 摘要图片Python学习之路-爬虫提高:selenium
什么是selenium
Selenium是一个Web的自动化测试工具#xff0c;最初是为网站自动化测试而开发的#xff0c;Selenium 可以直接运行在浏览器上#xff0c;它支持所有主流的浏览器#xff08;包括PhantomJS这些无界面的浏览器#xff09…Python学习之路-爬虫提高:selenium
什么是selenium
Selenium是一个Web的自动化测试工具最初是为网站自动化测试而开发的Selenium 可以直接运行在浏览器上它支持所有主流的浏览器包括PhantomJS这些无界面的浏览器可以接收指令让浏览器自动加载页面获取需要的数据甚至页面截屏
PhantomJS的介绍
PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器它会把网站加载到内存并执行页面上的 JavaScript
下载地址http://phantomjs.org/download.html
Chromedriver的介绍
Chromedriver 也是一个能够被selenium驱动的浏览器但是和PhantomJS的区别在于它是有界面的
下载地址https://npm.taobao.org/mirrors/chromedriver
driver的安装
最简单的安装方式是解压后把bin目录下的可执行文件移动到环境变量下比如/usr/bin 或者是/usr/local/bin下面
注意Chromedriver和电脑上的chrome版本有对应关系建议使用最新的Chromedriver版本并且更新chrome浏览器到最新版
selenium的入门使用 知识点 掌握如何发送请求加载网页掌握如何进行简单的元素定位掌握如何从获取浏览器中的数据 加载网页 selenium通过控制浏览器所以对应的获取的数据都是elements中的内容 from selenium import webdriver driver webdriver.PhantomJS(“c:…/pantomjs.exe”)driver.get(http://www.baidu.com/)driver.save_screenshot(长城.png)定位和操作 driver.find_element_by_id(“kw”).send_keys(“长城”)driver.find_element_by_id(su).click()查看请求信息 driver.page_sourcedriver.get_cookies()driver.current_url退出 driver.close() #退出当前页面driver.quit() #退出浏览器selenium的定位操作 知识点 掌握定位元素的方法掌握获取元素中数据的方法 定位元素语法 find_element_by_id (返回一个元素)find_elements_by_xpath 返回一个包含元素的列表find_elements_by_link_text 根据连接文本获取元素列表find_elements_by_partial_link_text 根据连接包含的文本获取元素列表find_elements_by_tag_name (根据标签名获取元素列表)find_elements_by_class_name 根据类名获取元素列表注意 find_element和find_elements的区别 by_link_text和by_partial_link_tex的区别全部文本和包含某个文本 使用 以豆瓣首页为例:https://www.douban.com/ from selenium import webdriverdriver webdriver.Chrome()driver.get(https://www.douban.com/)ret1 driver.find_element_by_id(anony-nav)print(ret1)# 输出为selenium.webdriver.remote.webelement.WebElement (sessionea6f94544ac3a56585b2638d352e97f3, element0.5335773935305805-1)ret2 driver.find_elements_by_id(anony-nav)print(ret2)#输出为[selenium.webdriver.remote.webelement.WebElement (sessionea6f94544ac3a56585b2638d352e97f3, element0.5335773935305805-1)]ret3 driver.find_elements_by_xpath(//*[idanony-nav]/h1/a)print(len(ret3))#输出为1ret4 driver.find_elements_by_tag_name(h1)print(len(ret4))#输出为1ret5 driver.find_elements_by_link_text(下载豆瓣 App)print(len(ret5))#输出为1ret6 driver.find_elements_by_partial_link_text(豆瓣)print(len(ret6))#输出为28driver.close()获取数据语法 find_element仅仅能够获取元素不能顾直接获取其中的数据find_element_by_xapth也是这样获取文本element.text获取属性值element.get_attribute(href) 使用示例 from selenium import webdriverdriver webdriver.Chrome()driver.get(https://www.douban.com/)ret4 driver.find_elements_by_tag_name(h1)
print(ret4[0].text)
#输出豆瓣ret5 driver.find_elements_by_link_text(下载豆瓣 App)
print(ret5[0].get_attribute(href))
#输出https://www.douban.com/doubanapp/app?channelnimingyedriver.close()selenium 处理cookie
通过driver.get_cookies()能够获取所有的cookie
# 把cookie转化为字典
{cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}#删除一条cookie
driver.delete_cookie(CookieName)
# 删除所有的cookie
driver.delete_all_cookies()页面等待 为什么需要等待 如果网站采用了动态html技术那么页面上的部分元素出现时间便不能确定这个时候就可以设置一个等待时间强制要求在时间内出现否则报错 页面等待的方法 time.sleep(10)
使用selenium切换frame
frame是html中常用的一种技术即一个页面中嵌套了另一个网页selenium默认是访问不了frame中的内容的对应的解决思路是 driver.switch_to.frame()
动手模拟登陆qq邮箱
在使用selenium登录qq邮箱的过程中我们会发现无法在邮箱的登录input标签中输入内容通过观察源码可以发现form表单在一个frame中所以需要切换到frame中
selenium的优缺点
selenium能够执行页面上的js对于js渲染的数据和模拟登陆处理起来非常容易selenium由于在获取页面的过程中会发送很多请求所以效率非常低所以在很多时候需要酌情使用