Python爬虫真的很强大,在爬虫里自动操控浏览器

蟒蛇通过硒爬取数据是很多突破封锁的有效途径。但在使用硒中会遇到很多问题,本文就通过一问一答的形式来通熟易懂的普及如何通过硒执行JavaScript的程序,进而获取动态执行后的网页。

蟒蛇爬虫编程:用硒执行JavaScript的出错了,该咋改?

问题:

小王开始学习Python的爬虫编程了,仿佛整个互联网的数据都快被他纳入囊中了。今天,他又试图完成一个高难度动作,他想让硒中抓取到以下HTML后,并自动执行JS脚本,模仿鼠标自动执行一个点击动作。但令他很失望的是,居然,居然,没用!

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
1.  <div class = “vbseo_liked” >
2.  <a href= "http://www.jamiiforums.com/member.php?u=8355" rel= "nofollow"> Nyaralego </a>
3.  ,
4.  <a href= "http://www.jamiiforums.com/member.php?u=8870" rel= "nofollow"> Sikonge </a>
5.  ,
6.  <a href= "http://www.jamiiforums.com/member.php?u=8979" rel= "nofollow"> Ab-Titchaz </a>
7.  和
8.  <a onclick= "return vbseoui.others_click(this)" href= "http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#"> 其他11人</a>
9.  像 这样。
10.  </ DIV>

这是他执行的代码。

1.  browser.execute_script(“document.getElement(By.xpath(\”// div [@ class =‘vbseo_liked‘] / a [contains(@onclick,‘return vbseoui.others_click(this)‘)] \“)。点击()“ )

它没用,没有反应。究竟做错了什么?

Python的大大的答案:

要点回答:

使用硒查找元素并将其传递execute_script()给单击:


1.  link = browser.find_element_by_xpath(‘// div [@ class =“vbseo_liked”] / a [contains(@onclick,“return vbseoui.others_click(this)”)]‘ )
2.  browser.execute_script(‘arguments [0] .click();‘ ,link)

如果要从头解决这问题,那么以下就是需要了解它的一系列事情:

  • 如何使用JavaScript的模拟点击?

这就是我做的东西这很简单,但它有效:


1.  function  eventFire(el,etype){
2.  if(el.fireEvent){
3.  el.fireEvent(‘on‘  + etype);
4.  } else  {
5.  var evObj = document.createEvent(‘Events‘ );
6.  evObj.initEvent(etype, true , false );
7.  el.dispatchEvent(evObj);
8.  }
9.  }

用法:


1.  eventFire(document.getElementById(‘mytest1‘ ), ‘click‘ );
  • 如何在Python中里进行模拟点击呢首先制定一个自定义的预期条件,等待元素被“执行”?

1.  class wait_for_text_not_to_end_with(object):
2.  def __init __(self,locator,text):
3.  self.locator = locator
4.  self.text =文字
5.  def __call __(self,driver):
6.  尝试:
7.  element_text = EC._find_element(driver,self.locator).text.strip()
8.  return not  element_text.endswith(self.text)
9.  除了 StaleElementReferenceException:
10.  返回False

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

?定义完毕后,如何在程序里调用这个类呢看看以下代码:


1.  来自 selenium import webdriver
2.  从 selenium.common.exceptions导入StaleElementReferenceException
3.  来自 selenium.webdriver.common。通过导入 通过
4.  来自 selenium.webdriver.support.ui导入WebDriverWait
5.  从selenium.webdriver.support导入expected_conditions 作为 EC
6.  class wait_for_text_not_to_end_with(object):
7.  def __init __(self,locator,text):
8.  self.locator = locator
9.  self.text =文字
10.  def __call __(self,driver):
11.  尝试:
12.  element_text = EC._find_element(driver,self.locator).text.strip()
13.  return not  element_text.endswith(self.text)
14.  除了 StaleElementReferenceException:
15.  返回False
16.  browser = webdriver.PhantomJS()
17.  browser.maximize_window()
18.  browser.get(“http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html” )
19.  username = browser.find_element_by_id(“navbar_username” )
20.  password  = browser.find_element_by_name(“vb_login_password_hint” )
21.  username.send_keys(“MarioP” )
22.  密码.send_keys(“ codeswitching ” )
23.  browser.find_element_by_class_name(“loginbutton” )。click ()
24.  wait = WebDriverWait(浏览器,30)
25.  wait.until(EC.visibility_of_element_located((. XPATH, ‘// h2 [contains(。,“Redirecting”)]‘ )))
26.  wait.until(EC.title_contains(‘Kenyan&Tanzanian‘ ))
27.  wait.until(EC.visibility_of_element_located((通过.ID, ‘postlist‘ )))
28.  #点击 “其他11”  链接
29.  link = browser.find_element_by_xpath(‘// div [@ class =“vbseo_liked”] / a [contains(@onclick,“return vbseoui.others_click(this)”)]‘ )
30.  link.click()
31.  browser.execute_script(“” “
32.  function  eventFire(el,etype){
33.  if(el.fireEvent){
34.  el.fireEvent(‘on‘  + etype);
35.  } else  {
36.  var evObj = document.createEvent(‘Events‘ );
37.  evObj.initEvent(etype, true , false );
38.  el.dispatchEvent(evObj);
39.  }
40.  }
41.  eventFire(arguments [0], “click” );
42.  “”,“链接”
43.  #等待 对的 “格” 不以结束与“11人链接这一点。”
44.  wait.until(wait_for_text_not_to_end_with((. CLASS_NAME, ‘vbseo_liked‘ ), “其他11个人这样。” ))
45.  打印 ‘成功!!‘
46.  浏览器。关闭()

看,如何在蟒蛇里通过硒来爬取数据就是这么简单。要点掌握好,开始编制自己的爬虫吧。

原文地址:https://blog.51cto.com/14510224/2435937

时间: 2024-08-28 11:31:52

Python爬虫真的很强大,在爬虫里自动操控浏览器的相关文章

ReSharper的功能真的很强大主要是针对代码规范和优化,园子里介绍的也不少,如果你没有安装,那我只能表示你们会相见恨晚

二.ReSHarper 代码规范.单元测试.... ReSharper的功能真的很强大,主要是针对代码规范和优化,园子里介绍的也不少,如果你没有安装,那我只能表示你们会相见恨晚! 1.像命名不规范,foreach转化为linq, 用var来命名,出名的Ctrl+alt+Enter 自动修改,清除多余的变量和引用,Ctrl+K+D(这是VS自带的,搞错了)文档对齐,Ctrl+R+R 命名替换 等等我就不再多说了.用过的人都知道. 2.关键是这个货居然还能调整CSS. 比如: 比自己敲要来的快,当然

【转】 值得推荐的C/C++框架和库 (真的很强大)

[转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. T

值得推荐的C/C++框架和库 (真的很强大) c

http://m.blog.csdn.net/mfcing/article/details/49001887 值得推荐的C/C++框架和库 (真的很强大) 发表于2015/10/9 21:13:14  14199人阅读 分类: 开源 本篇文章主要介绍了"值得推荐的C/C++框架和库 (真的很强大)",主要涉及到方面的内容,对于C/C++教程感兴趣的同学可以参考一下: 得学习的C语言开源项目- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使

python 真的很强大

Python作为一种功能强大且通用的编程语言而广受好评,它具有非常清晰的语法特点,适用于多种操作系统,目前在国际上非常流行,正在得到越来越多的应用. 下面就让我们一起来看看它的强大功能: Python(派森),它是一个简单的.解释型的.交互式的.可移植的.面向对象的超高级语言.这就是对Python语言的最简单的描述. Python有一个交互式的开发环境,因为Python是解释运行,这大大节省了每次编译的时间.Python语法简单,且内置有几种高级数据结构,如字典.列表等,使得使用起来特别简单,程

C/C++框架和库 (真的很强大) 转

http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali

值得推荐的C/C++框架和库 (真的很强大)

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht

(转载)值得推荐的C/C++框架和库 (真的很强大)

原文地址 http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.ti

正则表达式真的很强大,可惜你不会写

元字符 重复限定符 分组 转义 条件或 区间 正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript.还是后端的Java.c#.他们都提供相应的接口/函数支持正则表达式. 但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外星文似的字符串,替代了你用一大篇幅的if else代码来做一些内容校验. 既然喜欢,那就动手学呗,可当你百度出一一堆相关资料时,你发现无一不例外的枯燥至极,难以学习(实话说,当年

RouterOS 安装及配置(功能真的很强大)

一,硬件支持兼容的x86平台SMP – 兼容的多核心处理器和多处理器内存:最小32MB,最大支持2GB存储:IDE.SATA,.CF存储卡.USB和DOM闪存盘,最小需要64MB空间Linux v2.6内核支持的扩展槽PCI.PCI-e.PCI-X 二,安装完后必配3项:ip地址,nat,指定网关,之后网络就可以通了. 我的实施环境:内存   256m双网卡RouterOS 2.9.27 这个版本非常之稳定 2.1设置网卡名和ip地址:In se 0 na=WANIn se 1 na=LANIn