Python爬⾍--Selenium模拟⽤户的键盘⿏标操作
基于 HttpClient的爬⾍对于许多混淆的加密库需要慢慢调试,到加密原理,耗时耗⼒,等你破解了加密⽅法说不定⼜换了新的加密⽅法,所以,针对这样的⽹站还是选择内置浏览引擎的爬⾍(关键词:PhantomJS,Selenium)在浏览器引擎运⾏页⾯,直接获取了正确的结果,拿到需要的数据.
Selenium
是⼀个Web的⾃动化测试⼯具,最初是为⽹站⾃动化测试⽽开发的,类型像我们玩游戏⽤的按键精灵,可以按指定的命令⾃动操作,不同是Selenium 可以直接运⾏在浏览器上,它⽀持所有主流的浏览器(包括PhantomJS这些⽆界⾯的浏览器)。
Selenium 可以根据我们的指令,让浏览器⾃动加载页⾯,获取需要的数据,甚⾄页⾯截屏,或者判断⽹站上某些动作是否发⽣。Selenium ⾃⼰不带浏览器,不⽀持浏览器的功能,它需要与第三⽅浏览器结合在⼀起才能使⽤.
先下载selenium webdriver ‘’,下载好后放到python⽬录⾥⾯
firefox的⽬录也要添加到环境变量中
Selenium 库⾥有个叫 WebDriver 的 API。WebDriver 有点⼉像可以加载⽹站的浏览器,但是它也可以像 BeautifulSoup 或者其他Selector 对象⼀样⽤来查页⾯元素,与页⾯上的元素进⾏交互 (发送⽂本、点击等),以及执⾏其他动作来运⾏⽹络爬⾍。
selenium快速⼊门
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想调⽤键盘按键操作需要引⼊keys包
from selenium.webdrivermon.keys import Keys
#创建浏览器对象
driver = webdriver.Firefox()
<("www.baidu")
#打印页⾯标题“百度⼀下你就知道”
print driver.title
#⽣成当前页⾯快照
driver.save_screenshot("baidu.png")
# id="kw"是百度搜索框,输⼊字符串“微博”,跳转到搜索中国页⾯driver.find_element_by_id("kw").send_keys(u"微博")
# id="su"是百度搜索按钮,click() 是模拟点击
driver.find_element_by_id("su").click()
# 获取新的页⾯快照
driver.save_screenshot(u"微博.png")
# 打印⽹页渲染后的源代码
print driver.page_source
# 获取当前页⾯Cookie
_cookies()
# ctrl+a 全选输⼊框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') # ctrl+x 剪切输⼊框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') # 输⼊框重新输⼊内容
driver.find_element_by_id("kw").send_keys("test")
# 模拟Enter回车键
driver.find_element_by_id("su").send_keys(Keys.RETURN)
# 清除输⼊框内容
driver.find_element_by_id("kw").clear()
# ⽣成新的页⾯快照
driver.save_screenshot("test.png")
# 获取当前url
print driver.current_url
# 关闭当前页⾯,如果只有⼀个页⾯,会关闭浏览器 # driver.close()
# 关闭浏览器
driver.quit()
1.页⾯操作
假如有下⾯的输⼊框
<input type="text" name="user-name" id="passwd-id" />
寻⽅法
# 获取id标签值
element = driver.find_element_by_id("passwd-id")
# 获取name标签值
element = driver.find_element_by_name("user-name")
# 获取标签名值
element = driver.find_elements_by_tag_name("input")
# 也可以通过XPath来匹配
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
2.定位元素的⽅法
find_element_by_id
find_elements_by_name
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_elements_by_css_selector
3.⿏标动作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
# 要想调⽤键盘按键操作需要引⼊keys包
from selenium.webdrivermon.keys import Keys from selenium.webdriver import ActionChains
#创建浏览器对象
driver = webdriver.Firefox()
<("www.baidu")
#⿏标移动到某处
action1 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action1).perform()
#⿏标移动到某处单击
action2 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action2).click(action2).perform() #⿏标移动到某处双击
action3 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action3).double_click(action3).perform() # ⿏标移动到某处右击
action4 = driver.find_element_by_id("su")
ActionChains(driver).move_to_element(action4).context_click(action4).perform()
4.Select表单
遇到下来框需要选择操作时,Selenium专门提供了Select类来处理下拉框
# 导⼊ Select 类
from selenium.webdriver.support.ui import Select
# 到 name 的选项卡
select = Select(driver.find_element_by_name('status'))
#
select.select_by_index(1)
select.select_by_value("0")
select.select_by_visible_text(u"xxx")
以上是三种选择下拉框的⽅式,它可以根据索引来选择,可以根据值来选择,可以根据⽂字来选择。注意:
全部取消⽅法
select.deselect_all()
5.弹窗处理
当页⾯出现了弹窗提⽰
alert = driver.switch_to_alert()
6.页⾯切换
⼀个浏览器肯定会有很多窗⼝,所以我们肯定要有⽅法来实现窗⼝的切换。切换窗⼝的⽅法如下:driver.switch_to.window("this is window name")
7.页⾯前进和后退
操作页⾯的前进和后退功能:
driver.forward()
#前进
driver.back()
# 后退
实例 模拟登陆douban⽹站
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdrivermon.keys
import Keys
selenium获取cookieimport time
driver = webdriver.Firefox()
<("www.douban")
# 输⼊账号密码
driver.find_element_by_name("form_email").send_keys("158xxxxxxxx")
driver.find_element_by_name("form_password").send_keys("zhxxxxxxxx")
# 模拟点击登录
driver.find_element_by_xpath("//input[@class='bn-submit']").click()
# 等待3秒
time.sleep(3)
# ⽣成登陆后快照
driver.save_screenshot(u"douban.png")
driver.quit()
动态页⾯模拟点击--->>>爬取⽃鱼所有房间名,观众⼈数
(1)⾸先分析‘’下⼀页‘’的class变化,如果不是最后⼀页的时候,‘下⼀页’的class如下
(2)如果到了最后⼀页,‘下⼀页’变为隐藏,点击不了,class变为如下
(3)到个房间的名字和观众⼈数的class
image.png
(4)代码

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。