8-1 selenium动态网页请求与模拟登录知乎

Ⅰ、介绍selenium

1.什么是selenium:selenium百度百科

2.selenium的构架图:

如果要操作浏览器,还需要一个drive。

Ⅱ、安装selenium

1.可以 pip install selenium。

2.找selenium的文档(比较难找)。

如图:

找到Drive,下载对应浏览器的drive,推荐用chrome(如果打不开就要VPN下载)

Ⅲ、使用selenium

 # -*- coding: utf-8 -*-

 from selenium import webdriver
from scrapy.selector import Selector #知乎的模拟登录
browser = webdriver.Chrome(executable_path="E:/chromedriver.exe") #路径是chromedriver.exe的存放的位置
browser.get("https://www.zhihu.com/#signin")
browser.find_element_by_css_selector(".view-signin input[name='account']").send_keys("********") #帐号
browser.find_element_by_css_selector(".view-signin input[name='password']").send_keys("********") #密码
browser.find_element_by_id("captcha").send_keys(input('请输入验证码:'))
browser.find_element_by_css_selector(".view-signin button.sign-button").click() #登录
browser.quit() #可以用selenium得到js加载后的html,比如这样的话可以抓取到本来抓取的不到的一些字段(淘宝的交易量等等)
browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
print(browser.page_source) #page_source就是js加载完的源代码
#browser.quit()
'''
如果是用selenium本身的选择器(python写的,比较慢),会很慢
所以现在转换成scrapy中的selector(他是用c语言写的,很快)
模版,也可以嵌入scrapy中
'''
t_selector=Selector(text=browser.page_source)
print(t_selector.xpath('//*[@id="J_StrPriceModBox"]/dd/span/text()').extract())

有时候取不到内容,看看是不是还没有加载完,在中间sleeep几秒就好了。

8-2 selenium模拟登录微博, 模拟鼠标下拉

微博也有开放的API:http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

 #selenium 完成微博模拟登录
browser = webdriver.Chrome(executable_path="E:/chromedriver.exe")
browser.get("http://weibo.com/")
import time
time.sleep(5)
browser.find_element_by_css_selector("#loginname").send_keys("******")
browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("******")
browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click()
#下拉
for i in range(3):
'''三次下拉操作,这是javascript的知识'''
browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
time.sleep(3)

8-3 chromedriver不加载图片、phantomjs获取动态网页

chromedriver不加载图片:

 #设置chromedriver不加载图片
#是固定的模版
chrome_opt = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2}
chrome_opt.add_experimental_option("prefs", prefs)
browser = webdriver.Chrome(executable_path="E:/chromedriver.exe",chrome_options=chrome_opt)
browser.get("http://weibo.com/")

phantomjs获取动态网页:

下载地址:http://phantomjs.org/download.html 如果不能下载,复制链接到迅雷下载

淘宝的详情页实例

 #phantomjs, 无界面的浏览器, 多进程情况下phantomjs性能会下降很严重
browser = webdriver.PhantomJS(executable_path="F:/迅雷下载/phantomjs-2.1.1-windows/bin/phantomjs.exe")
browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
print (browser.page_source)
browser.quit()

需要代码汇总请移步我的github:https://github.com/pujinxiao/project_pjx/blob/master/s0vkaq/ArticleSpider/tools/selenium_spider.py

关于selenium的我推荐虫师的教程,还是很不错的。「UI 测试自动化selenium」汇总

作者:今孝

出处:http://www.cnblogs.com/jinxiao-pu/p/6809583.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

最新文章

  1. opencv在图像显示中文
  2. AutoMapper(六)
  3. ES6笔记系列
  4. Intelij IDEA解决Dependency无法更新问题
  5. mac下wifi无法连接的问题
  6. HTML 学习笔记 CSS3 (背景)
  7. JS-Array数组对象
  8. OBD K线抓包 III
  9. AxureRP8实战手册(基础1-10)
  10. CSS 动画之十-图片+图片信息展示
  11. 解决Oracle忘记密码问题
  12. mysql学习之-字符集选定,修改。
  13. ADO.NET 结构 集中数据库联接结构
  14. shell修改文件名(二)
  15. 使用xorm工具,根据数据库自动生成 go 代码
  16. 修改Vim内注释字体颜色
  17. java设计模式之模板模式以及钩子方法使用
  18. Java多线程系列——信号量:Semaphore
  19. dom元素操作(动态事件绑定)
  20. ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单

热门文章

  1. 4-C#格式处理
  2. 批判“await使用中的阻塞和并发”——对asyc/await这对基友的误会和更正
  3. sharepoint 2010 powershell
  4. Java NIO Selector选择器
  5. 375. 猜数字大小 II leetcode java
  6. Spring 中aop切面注解实现
  7. C# Winform下一个热插拔的MIS/MRP/ERP框架16(窗体基类场景2)
  8. 2018 ACM-ICPC 亚洲区域赛青岛现场赛 —— Problem F. Tournament
  9. 支持向量机通俗导论(SVM学习)
  10. 多并发编程基础 之线程程 Thried