zoukankan      html  css  js  c++  java
  • Python学习笔记从Web抓取信息之用selenium控制浏览器

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      selenium 模块让 Python 直接控制浏览器,实际点击链接,填写登录信息,几乎就像是有一个人类用户在与页面交互。与 Requests 和 Beautiful Soup 相比,Selenium

    允许你用高级得多的方式与网页交互。但因为它启动了 Web 浏览器,假如你只是想从网络上下载一些文件,会有点慢,并且难以在后台运行。(selenium也可以无浏览器运行,这个以后在说)。

      前提都是在selenium、webdriver和Chrome浏览器都装好的情况下,不会配置环境的可以百度一下,有很多资料也可以留言问我。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      1、webdriver.Chrome()方法,启动浏览器

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #导入selenium的模块需要一点技巧。不是import selenium,而是要运行from seleniumimport webdriver。现在不用明白为什么记住就行了
    from selenium import webdriver
    
    #使用webdriver.Chrome(),启动Chrome浏览器
    brower = webdriver.Chrome()
    #查看brower的类型
    print(type(brower))
    #使用get()方法,向浏览器输入想访问的网址
    brower.get('http://www.baidu.com')
    

      运行结果:自动启动浏览器,并访问百度首页。

      2、在页面中寻找元素

      WebDriver对象有好几种方法,用于在页面中寻找元素。它们被分成find_element_*和find_elements_*方法。find_element_*方法返回一个 WebElement 对象,代表页面中匹配查询的第一个元素。find_elements_*方法返回 WebElement_*对象的列表,包含页面中所有匹配的元素。

      除了*_by_tag_name()方法,所有方法的参数都是区分大小写的。如果页面上没有元素匹配该方法要查找的元素,selenium 模块就会抛出 NoSuchElement 异常。如

    果你不希望这个异常让程序崩溃,就在代码中添加 try 和 except 语句。

      一旦有了 WebElement 对象,就可以读取它们的属性,或调用其中的方法,了解它的更多功能。

      示例代码:

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get('http://inventwithpython.com')
    try:
        elem = browser.find_element_by_class_name('container')
        print('Found <%s> element with that class name!' % (elem.tag_name))
    except:
        print('Was not able to find an element with that name.')
    

      运行结果:我们发现了一个元素带有类名'container',它的标签名是'div'。

      3、点击页面

      ind_element_*和 find_elements_*方法返回的 WebElement 对象有一个 click()方法,模拟鼠标在该元素上点击。这个方法可以用于链接跳转,选择单选按钮,点击提交按钮,或者触发该元素被鼠标点击时发生的任何事情。

      示例代码:

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    from selenium import webdriver
    brower = webdriver.Chrome()
    #打开网址
    brower.get('http://inventwithpython.com')
    #找到Read Online for Free按钮
    linkElem = brower.find_element_by_link_text('Read Online for Free')
    #打印类型
    print(type(linkElem))
    #点击这个按钮
    linkElem.click()
    

      运行结果:查找到按钮名称为Read Online for Free,并点击它。

      4、填写并提交表单

       Web 页面的文本字段发送击键,只要找到那个文本字段的<input>或<textarea>元素,然后调用 send_keys()方法。例如:

    >>> from selenium import webdriver
    >>> browser = webdriver.Firefox()
    >>> browser.get('http://gmail.com')
    >>> emailElem = browser.find_element_by_id('Email')
    >>> emailElem.send_keys('not_my_real_email@gmail.com')
    >>> passwordElem = browser.find_element_by_id('Passwd')
    >>> passwordElem.send_keys('12345')
    >>> passwordElem.submit()
    

      只要 Gmail 没有在本书出版后改变 Username 和 Password 文本字段的 id,上面的 代码就会用提供的文本填写这些文本字段(你总是可以用浏览器的开发者工具验证 id)。在任何元素上调用 submit()方法,都等同于点击该元素所在表单的 Submit 按钮(你 可以很容易地调用 emailElem.submit(),代码所做的事情一样)。

      5、发送特殊键

      selenium 有一个模块,针对不能用字符串值输入的键盘击键。它的功能非常类 似于转义字符。这些值保存在 selenium.webdriver.common.keys 模块的属性中。由于 这个模块名非常长,所以在程序顶部运行 from selenium.webdriver. common.keys import Keys 就比较容易。如果这么做,原来需要写 from selenium. webdriver.common.keys 的 地方,就只要写 Keys。表 11-5 列出了常用的 Keys 变量。

      例如,如果光标当前不在文本字段中,按下 home 和 end 键,将使浏览器滚动 到页面的顶部或底部。在交互式环境中输入以下代码,注意 send_keys()调用是如何 滚动页面的:

    >>> from selenium import webdriver
    >>> from selenium.webdriver.common.keys import Keys
    >>> browser = webdriver.Firefox()
    >>> browser.get('http://nostarch.com')
    >>> htmlElem = browser.find_element_by_tag_name('html')
    >>> htmlElem.send_keys(Keys.END) # scrolls to bottom
    >>> htmlElem.send_keys(Keys.HOME) # scrolls to top
    

      标签是 HTML 文件中的基本标签:HTML 文件的完整内容包含在 和标签之内。调用 browser.find_element_by_tag_name('html')是像一般 Web 页 面发送按键的好地方。当你滚动到该页的底部,新的内容就会加载,这可能会有用。

      6、点击浏览器按钮

      利用以下的方法,selenium 也可以模拟点击各种浏览器按钮:

      browser.back()点击“返回”按钮。

      browser.forward()点击“前进”按钮。

       browser.refresh()点击“刷新”按钮。

      browser.quit()点击“关闭窗口”按钮。

  • 相关阅读:
    Different ways how to escape an XML string in C#
    __VIEWSTATE
    Git for Computer Scientists
    关于SQL Server死锁
    20个开源项目托管站点
    Understanding Host Headers in IIS
    开发与研发:区别很大
    Linux 0.12 “轮子”任务调度图示
    RabbitMQ学习第二记:工作队列的两种分发方式,轮询分发(Roundrobin)和 公平分发(Fair dispatch)
    ResultSetMetaData中getColumnLabel和getColumnName的区别
  • 原文地址:https://www.cnblogs.com/lirongyang/p/9703669.html
Copyright © 2011-2022 走看看