资讯专栏INFORMATION COLUMN

selenium动态数据获取的方法实现

89542767 / 273人阅读


  这篇文章主要是阐述了selenium可视化数据抓取有效的方法实现,文中根据举例编码讲到的十分详尽,对大家学习培训还是工作具有很强的参照学习培训使用价值,需求的小伙伴们下边伴随着小编就来互相学习了解一下吧。


  Selenium是一个自动化技术检测工具,运用它能够推动电脑浏览器实行特殊动作,如鼠标点击、下拉框等操作,同时也可以获取电脑浏览器现阶段获得界面的程序代码,保证由此可见即可获得。对于有些JavaScript动态性3D渲染的页面来说,此种抓取方式非常有效。接下来,就让我们来感受一下它的强大之处吧。


  webdriver的安装


  ????selenium安装


  首先,我们使用selenium进行测试,所以我们得安装selenium库。


  pip install selenium


  ????驱动安装


  webdriver是浏览器对应的驱动,我们使用的的浏览器有三种谷歌Chrome、微软Microsoft Edge、还有一个火狐Firefox,但是我们经常使用谷歌Chrome浏览器进行测试。现在我们就以Chrome浏览器为例下载它对应的chromedriver。


  官网:http://chromedriver.storage.googleapis.com/index.html


  注意:


  我们下载chromedriver驱动时,我们要查明浏览器的版本,要对应相应的版本号进行下载,否则会报错。禁止Google浏览器更新服务,可以上网查教程。


  ????基本使用


  ????查找节点


  Selenium可以驱动浏览器完成各种操作,比如填充表单、模拟点击等。比如,我们想要完成向某个输入框输入文字的操作,总需要知道这个输入框在哪里吧?而Selenium提供了一系列查找节点的方法,我们可以用这些方法来获取想要的节点,以便下一步执行一些动作或者提取信息。


  获取节点的方法:


  find_element_by_id
  find_element_by_name
  find_element_by_xpath
  find_element_by_link_text专门用来定位超链接文本(标签)全匹配
  find_element_by_partial_link_text模糊匹配
  find_element_by_tag_name
  find_element_by_class_name
  find_element_by_css_selector


  给个示例


  from selenium import webdriver
  browser=webdriver.Chrome()
  browser.get('https://www.baidu.com')
  input=browser.find_element_by_id('kw')
  input.send_keys('Python')
  browser.find_element_by_id('su').click()
  #提取页面
  print(browser.page_source.encode('utf-8'))
  #提取cookie
  print(browser.get_cookies())
  #提取当前请求地址
  print(browser.current_url)
  browser.close()


  运行代码后发现,会自动弹出一个Chrome浏览器。浏览器首先会跳转到百度,然后在搜索框中输入Python,接着跳转到搜索结果页


  注:当我们的chromedriver驱动没有放置到Chrome浏览器路径时,我们可以使用以下来申明浏览器对象。


   browser=webdriver.Chrome(executable_path="chromedriver安装路径")


  方法总结:


  brower.get(url):跳转当前url链接。


  browser.find_element_by_id('id属性值'):定位到id属性值。


  send_keys('输入关键字'):定位到输入框后输入。


  find_element_by_id('id属性值').click():定位到id属性值后点击。


  browser.page_source.encode('utf-8'):获取当前页面的源码。


  browser.get_cookies():提取cookies。


  browser.current_url:获取当前页面的url。


  brower.close():关闭浏览器。


  ????执行JavaScript


  对于某些操作,Selenium API并没有提供。比如,下拉进度条,它可以直接模拟运行JavaScript,此时使用execute_script()方法即可实现,代码如下:


  #document.body.scrollHeight获取页面高度
  from selenium import webdriver
  browser=webdriver.Chrome()
  browser.get('https://36kr.com/')
  #下拉边框一次性下拉
  browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
  #慢慢的下拉
  for i in range(1,9):
  time.sleep(random.randint(100,300)/1000)
  browser.execute_script('window.scrollTo(0,{})'.format(i*700))


  这里就利用execute_script()方法将进度条下拉到最底部。为了模拟人为活动,我们调节了下拉的缓冲时间。


  我们使用浏览器的控制台输入以下代码也能运行。

  window.scrollTo(0,document.body.scrollHeight)

01.png

  切换Frame


  我们知道网页中有一种节点叫作iframe,也就是子Frame,相当于页面的子页面,它的结构和外部网页的结构完全一致。Selenium打开页面后,它默认是在父级Frame里面操作,而此时如果页面中还有子Frame,它是不能获取到子Frame里面的节点的。这时就需要使用switch_to.frame()方法来切换Frame。示例如下:


  browser.get('https://www.douban.com/')
  login_iframe=browser.find_element_by_xpath('//div[ class="login"]/iframe')
  browser.switch_to.frame(login_iframe)
  browser.find_element_by_class_name('account-tab-account').click()
  browser.find_element_by_id('username').send_keys('123123123')


  首先我们要定位到iframe,然后用switch_to.frame()方法来切换Frame,这时我们就可以定位到子Frame进行有关操作了。


  ????前进后退


  平常使用浏览器时都有前进和后退功能,Selenium也可以完成这个操作,它使用back()方法后退,使用forward()方法前进。示例如下:


  import time
  from selenium import webdriver
  browser=webdriver.Chrome()
  browser.get('https://www.baidu.com/')
  browser.get('https://www.taobao.com/')
  browser.get('https://www.python.org/')
  browser.back()
  time.sleep(1)
  browser.forward()
  browser.close()

  这里我们连续访问3个页面,然后调用back()方法回到第二个页面,接下来再调用forward()方法又可以前进到第三个页面。


  ????选项卡管理


  在访问网页的时候,会开启一个个选项卡。在Selenium中,我们也可以对选项卡进行操作。示例如下:


  import time
  from selenium import webdriver
  browser=webdriver.Chrome()
  browser.get('https://www.baidu.com')
  browser.execute_script('window.open()')
  print(browser.window_handles)
  browser.switch_to_window(browser.window_handles[1])
  browser.get('https://www.taobao.com')
  time.sleep(1)
  browser.switch_to_window(browser.window_handles[0])
  browser.get('https://python.org')


  这里我们先跳转到百度再打开一个空白选项卡打印选项卡编号,再跳转到第二个选项卡也就是这个空白选项卡打开淘宝,休息一秒,再跳转到第一个选项卡打开python官网。


  ????配置操作


  selenium有很多配置,下面我举几个常见的。


  options=webdriver.ChromeOptions()
  #无头模式
  option.add_argument("-headless")
  #设置代理
  options.add_argument('proxy-server='+'192.168.0.28:808')
  #将浏览器最大化显示
  browser.maximize_window()
  #设置宽高
  browser.set_window_size(480,800)
  #通过js新打开一个窗口
  driver.execute_script('window.open("https://www.baidu.com");')
  browser=webdriver.Chrome(chrome_options=options)
  绕过检测
  绕过检测对于一些网站的自动化反爬很管用。
  #设置屏蔽
  options=webdriver.ChromeOptions()
  options.add_argument('--disable-blink-features=AutomationControlled')
  browsers=webdriver.Chrome(chrome_options=options)
  browsers.get('https://bot.sannysoft.com/')
  网站:https://bot.sannysoft.com/

  我们没设置绕过检测


  我们设置了绕过检测后


  到此为止,小编就给大家介绍完毕了,希望可以为大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128004.html

相关文章

  • Python3网络爬虫实战---37、动态渲染页面抓取:Selenium

    摘要:不过动态渲染的页面不止这一种。再有淘宝这种页面,它即使是获取的数据,但是其接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析来抓取。我们用一个实例来感受一下在这里们依然是先打开知乎页面,然后获取提问按钮这个节点,再将其 上一篇文章:Python3网络爬虫实战---36、分析Ajax爬取今日头条街拍美图下一篇文章:Python3网络爬虫实战---38、动态渲染页面抓取:Spla...

    zhjx922 评论0 收藏0
  • 动态HTML介绍 & Selenium PhantomJS

    摘要:一个网站使用的特征就是源代码里包含了入口比如如果你在一个网站上看到了,那么采集这个网站数据的时候要格外小心。直接点击下拉框中的选项不一定可行。未审核初审通过复审通过审核不通过专门提供了类来处理下拉框。 JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言。它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏。...

    Lsnsh 评论0 收藏0
  • Python 从零开始爬虫(八)——动态爬取解决方案 之 selenium

    摘要:然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏览器获得的解析的能力。所以说这货在动态爬取方面简直是挂逼级别的存在,相较于手动分析更简单易用,节省分析打码时间。一旦设置了隐式等待时间,它的作用范围就是对象实例的整个生命周期。 selenium——自动化测试工具,专门为Web应用程序编写的一个验收测试工具,测试其兼容性,功能什么的。然而让虫师们垂涎的并不是以上的种种,而是其通过驱动浏...

    fobnn 评论0 收藏0
  • 【小白+python+selenium库+图片爬取+反爬+资料】超详细新手实现(01)webdriv

    摘要:且本小白也亲身经历了整个从小白到爬虫初入门的过程,因此就斗胆在上开一个栏目,以我的图片爬虫全实现过程为例,以期用更简单清晰详尽的方式来帮助更多小白应对更大多数的爬虫实际问题。 前言: 一个月前,博主在学过python(一年前)、会一点网络(能按F12)的情况下,凭着热血和兴趣,开始了pyth...

    Half 评论0 收藏0
  • 在headless模式下运行selenium

    摘要:而在不久前宣布支持模式而后跟随的新闻再次勾起我无尽的回忆。那么我们就来谈谈在和浏览器不原生支持模式下如何使用来实现模式进行动态数据的抓取。比较常见的例子在中进行转发。下面我们进行测试发现其可以正常的运行。 原文地址: http://52sox.com/python-use-h... 在Python中进行浏览器测试时,一般我们会选择selenium这样的库来简化我们工作量。而有些时候,为...

    MoAir 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<