zoukankan      html  css  js  c++  java
  • python-爬虫-selenium和phantomJs

    1.selenum:三方库。可以实现让浏览器完成自动化的操作。
    2.环境搭建
    2.1 安装:pip install selenium
    2.2 获取浏览器的驱动程序
    下载地址:
    http://chromedriver.storage.googleapis.com/index.html
    http://npm.taobao.org/mirrors/chromedriver/
    浏览器版本和驱动版本的对应关系表:
    chromedriver版本 支持的Chrome版本
    https://blog.csdn.net/huilan_same/article/details/51896672

    定位元素的8种方式:

    #使用下面的方法,查找指定的元素进行操作即可
    find_element_by_id 根据id找节点
    find_elements_by_name 根据name找
    find_elements_by_xpath 根据xpath查找
    find_elements_by_tag_name 根据标签名找
    find_elements_by_class_name 根据class名字查找
    # 通过id定位:
    dr.find_element_by_id("kw")
    
    # 通过name定位:
    dr.find_element_by_name("wd")
    
    # 通过class name定位:
    dr.find_element_by_class_name("s_ipt")
    
    # 通过tag name定位:
    dr.find_element_by_tag_name("input")
    
    # 通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
    dr.find_element_by_xpath("//*[@id='kw']")
    dr.find_element_by_xpath("//*[@name='wd']")
    dr.find_element_by_xpath("//input[@class='s_ipt']")
    dr.find_element_by_xpath("/html/body/form/span/input")
    dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
    dr.find_element_by_xpath("//form[@id='form']/span/input")
    dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
    
    # 通过css定位,css定位有N种写法,这里列几个常用写法:
    dr.find_element_by_css_selector("#kw")
    dr.find_element_by_css_selector("[name=wd]")
    dr.find_element_by_css_selector(".s_ipt")
    dr.find_element_by_css_selector("html > body > form > span > input")
    dr.find_element_by_css_selector("span.soutu-btn> input#kw")
    dr.find_element_by_css_selector("form#form > span > input")


    接下来,我们的页面上有一组文本链接。

    <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
    <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
    # 通过link text定位:
    dr.find_element_by_link_text("新闻")
    dr.find_element_by_link_text("hao123")
    
    # 通过partial link text定位:
    dr.find_element_by_partial_link_text("")
    dr.find_element_by_partial_link_text("hao")
    dr.find_element_by_partial_link_text("123")


    Selenium库下webdriver模块常用方法的使用
    控制浏览器操作的一些方法
    方法 说明
    set_window_size() 设置浏览器的大小
    back() 控制浏览器后退
    forward() 控制浏览器前进
    refresh() 刷新当前页面
    clear() 清除文本
    send_keys (value) 模拟按键输入
    click() 单击元素
    submit() 用于提交表单
    get_attribute(name) 获取元素属性值
    is_displayed() 设置该元素是否用户可见
    size 返回元素的尺寸
    text 获取元素的文本
    ---------------------

    例子:

    1.chrom浏览器自动搜索
    from selenium import webdriver
    from time import sleep
    # 创建浏览器对象 驱动为浏览器的路径
    bro = webdriver.Chrome("./chromedriver.exe")
    url = "https://www.baidu.com"7 # 发送请求
    bro.get(url)
    # 让百度指定词条的搜索
    text = bro.find_element_by_id('kw')
    # 发送关键字
    text.send_keys('python')
    # 点击搜索按钮
    button = bro.find_element_by_id('su')
    button.click()
    # 关闭浏览器
    bro.quit()
     
    2.phantomjs无界面浏览器,其自动化流程上述操作谷歌自动化流程一
    致。
    from selenium import webdriver
    from time import sleep
    bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
    爬取phantomjs‐2.1.1‐windows/bin/phantomjs.exe')
    url = "https://www.baidu.com"
    # 发送请求
    bro.get(url)
    bro.save_screenshot('./1.png')
    # 让百度指定词条的搜索
    text = bro.find_element_by_id('kw')
    # 发送关键字
    text.send_keys('python')
    bro.save_screenshot('./2.png')
    # 点击搜索按钮
    button = bro.find_element_by_id('su')
    button.click()
    sleep(3)
    bro.save_screenshot('./3.png')
    # 关闭浏览器
    bro.quit()
    3.豆瓣网电影排行榜滚动条数据
    from selenium import webdriver
    from time import sleep3 url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&typ
    e=24&interval_id=100:90&action='
    bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
    爬取phantomjs‐2.1.1‐windows/bin/phantomjs.exe')
    bro.get(url)
    sleep(1)
    bro.save_screenshot("./1.png")
    js = 'window.scrollTo(0,document.body.scrollHeight)'
    # 执行js代码 滚动条
    bro.execute_script(js)
    sleep(1)
    bro.save_screenshot('./2.png')
    # 获取页面数据
    page_source = bro.page_source
    print(page_source)
  • 相关阅读:
    【CSS】4种CSS方法设置元素垂直水平居中
    js数据类型:引用和5种基本数据类型
    iOS——CALayer的shadow无效问题
    iOS——自定义Segue实现总结
    iOS动画
    iOS——Command-Line 查看当前SDK版本并修改默认SDK版本
    iOS——Swift开发中的单例设计模式(摘译,非原创)
    Windows Phone 8 解锁提示IpOverUsbSvc问题——IpOverUsbEnum返回No connected partners found解决方案
    Windows 8.1 开发过程中遇到的小问题(2)
    Windows 8.1 开发过程中遇到的小问题
  • 原文地址:https://www.cnblogs.com/person1-0-1/p/11320755.html
Copyright © 2011-2022 走看看