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)
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/person1-0-1/p/11320755.html
Copyright © 2011-2022 走看看