当前位置:   article > 正文

Day:006(1) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

Day:006(1) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

selenium介绍与安装

        Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

        Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

        Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

PyPI网站下载 Selenium库https://pypi.org/simple/selenium/,也可以用 第三方管理器

Selenium 官方参考文档:https://selenium-python.readthedocs.io/index.html 

安装

pip install selenium

安装Firefox geckodriver 

安装firefox最新版本,添加Firefox可执行程序到系统环境变量。记得关闭firefox的自动更新

firefox下载地下:https://github.com/mozilla/geckodriver/releases

将下载的geckodriver.exe 放到path路径下 D:\Python\python_version\

安装ChromeDriver

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

注意
版本号要对应

下载下来的文件解压到 python_version\Scripts 

测试代码

  1. # 导入 webdriver
  2. from selenium import webdriver
  3. # 要想调用键盘按键操作需要引入keys包
  4. from selenium.webdriver.common.keys import Keys
  5. # 调用环境变量指定的PhantomJS浏览器创建浏览器对象
  6. driver = webdriver.Chrome()
  7. # 如果没有在环境变量指定PhantomJS位置
  8. # driver =webdriver.Chrome(executable_path="./phantomjs"))
  9. # get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择 time.sleep(2)
  10. driver.get("http://www.baidu.com/")
  11. # 打印网页渲染后的源代码
  12. print(driver.page_source)
  13. # 生成新的页面快照
  14. driver.save_screenshot("python爬虫.png")
  15. # 获取当前url
  16. print(driver.current_url)
  17. # 关闭浏览器
  18. driver.quit()

selenium 控制浏览器

最大化窗口

我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们“观看”脚本的执行。

  1. browser = webdriver.Chrome()
  2. url= 'http://www.baidu.com'
  3. browser.get(url)
  4. borwser.maximize_window()
 设置宽与高

最大化还是不够灵活,能不能随意的设置浏览的宽、高显示?当然是可以的。

  1. browser = webdriver.Chrome()
  2. url= 'http://www.baidu.com'
  3. browser.get(url)
  4. borwser.set_window_size(500,600)
 浏览器前进、后退

浏览器上有一个后退、前进按钮,对于浏览网页的人是比较方便的;对于做web自动化测试的同学来说应该算是一个比较难模拟的问题
其实很简单,下面看看python的实现方式

  1. browser = webdriver.Chrome()#访问百度首页
  2. first_url= 'http://www.baidu.com
  3. browser.get(first_url)
  4. time.sleep(2)#访问新闻页面
  5. second_url='http://news.baidu.com
  6. browser.get(second_url)
  7. time.sleep(2)#返回(后退)到百度首页print "backto %s "%(first_url)
  8. browser.back()
  9. time.sleep(1)#前进到新闻页print "forward to %s"%(second_url)
  10. browser.forward()
  11. time.sleep(2)
  12. browser.quit()

selenium元素定位

对象的定位应该是自动化的核心,要想操作一个对象,首先应该识别这个对象。

一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、6门牌找到这个人。

对象定位

webdriver提供了对象定位方法

  • find_element(type,value)
  • find_elements(type,value)
利用 By 类来确定哪种选择方式 
  1. from selenium.webdriver.common.by import By
  2. chrome.find_element(by=By.ID,value='su')

By 类的一些属性如下 :

  • ID = "id"
  • NAME = "name"
  • XPATH = "xpath"
  • LINK_TEXT = "link text"
  • PARTIAL_LINK_TEXT = "partial link text"
  • TAG_NAME = "tag name"
  • CLASS_NAME = "class name"
  • CSS_SELECTOR = "css selector"
操作元素 

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个原素进行操作。

鼠标点击呢还是键盘输入,这要取决于我们定位的是按钮还输入框。

一般来说,webdriver中比较常用的操作对象的方法有下面几个:

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象的内容,如果可以的话
  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.service
  3. import Service
  4. from time import sleep
  5. from selenium.webdriver.common.by import By
  6. def test_element():
  7.    # 创建驱动对象
  8.    s =
  9. Service(executable_path='./chromedriver.exe'
  10. )
  11.    # 创建一个浏览器
  12.    driver = webdriver.Chrome(service=s)
  13.    # 打个百度
  14.    driver.get('https://cn.bing.com/')
  15.    sleep(2)
  16.    # 获取 搜索框,并输出“百战”
  17.  
  18. driver.find_element(By.ID,'sb_form_q').send
  19. _keys('百战')
  20.    sleep(1)
  21.    # 获取 搜索按钮,并点击
  22.  
  23. driver.find_element(By.ID,'search_icon').cl
  24. ick()
  25. if __name__ =='__main__':
  26.    test_element()

selenium定位下拉菜单

包含下拉菜单页面

  1. <html>
  2.    <head>
  3.        <meta http-equiv="content-type"
  4. content="text/html;charset=utf-8" />
  5.        <title>Level Locate</title>    
  6.  <script type="text/javascript"
  7. src="https://cdn.jsdelivr.net/npm/jquery@1.1
  8. 2.4/dist/jquery.min.js"></script>
  9.        <link
  10. href="https://cdn.jsdelivr.net/npm/@bootcss/
  11. v3.bootcss.com@1.0.9/dist/css/bootstrap.min.
  12. css" rel="stylesheet" />        
  13.    </head>
  14.    <body>
  15.        <h3>Level locate</h3>
  16.        <div class="span3 col-md-3">        
  17.            <div class="well">
  18.                <div class="dropdown">
  19.                    <a class="dropdowntoggle" data-toggle="dropdown"href="#">Link1</a>
  20.                    <ul class="dropdownmenu" role="menu" aria-labelledby="dLabel"
  21. id="dropdown1" >
  22.                        <li><a tabindex="-1"
  23. href="http://www.bjsxt.com">Action</a></li>
  24.                        <li><a tabindex="-1"
  25. href="#">Another action</a></li>
  26.                        <li><a tabindex="-1"
  27. href="#">Something else here</a></li>
  28.                        <li class="divider">
  29. </li>
  30.                        <li><a tabindex="-1"
  31. href="#">Separated link</a></li>
  32.                    </ul>
  33.                </div>                
  34.            </div>
  35.  </div>
  36.        <div class="span3 col-md-3">        
  37.            <div class="well">
  38.                <div class="dropdown">
  39.                    <a class="dropdowntoggle" data-toggle="dropdown"
  40. href="#">Link2</a>
  41.                    <ul class="dropdownmenu" role="menu" aria-labelledby="dLabel" >
  42.                        <li><a tabindex="-1"
  43. href="#">Action</a></li>
  44.                        <li><a tabindex="-1"
  45. href="#">Another action</a></li>
  46.                        <li><a tabindex="-1"
  47. href="#">Something else here</a></li>
  48.                        <li class="divider">
  49. </li>
  50.                        <li><a tabindex="-1"
  51. href="#">Separated link</a></li>
  52.                    </ul>
  53.                </div>                
  54.            </div>            
  55.        </div>
  56.    </body>
  57.    <scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.9/dist/js/bootstrap.min.js">
  58. </script>
  59. </html>

选中元素

  1. from selenium import webdriver
  2. 11from selenium.webdriver.chrome.service
  3. import Service
  4. from selenium.webdriver.common.by import By
  5. import os
  6. from time import sleep
  7. def test_down_menu():
  8.    # 创建一个驱动
  9.    s = Service(executable_path='./chromedriver.exe')
  10.    # 创建浏览器
  11.    driver = webdriver.Chrome(service=s)
  12.    # 设置方位的文件地址
  13.    file_path ='file:///'+os.path.abspath('./html/test01.html')
  14.    # 访问页面
  15.    driver.get(file_path)
  16.    # 定位父级元素
  17.  
  18. driver.find_element(By.LINK_TEXT,'Link1').click()
  19.    # 找到要移动的位置
  20.    menu =
  21. driver.find_element(By.LINK_TEXT,'Action')
  22.    # 做一个移动光标的动作
  23.    # 定义一个动作在driver移动到 menu的位置     执行动作
  24.  #webdriver.ActionChains(driver).move_to_element(menu).perform()
  25.    # sleep(2)
  26.    # 定位子级元素
  27.    menu.click()
  28.    # 睡眠2秒
  29.    sleep(2)
  30.    # 关闭浏览器
  31.    driver.quit()
  32. if __name__ == '__main__':
  33.    test_down_menu()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/435261
推荐阅读
相关标签
  

闽ICP备14008679号