• 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()点击“关闭窗口”按钮。

  • 相关阅读:
    Apple Magic Keyboard All In One
    KMP Algorithm All In One
    js parser HTML template string to DOM element All In One
    Mac 电脑外接键盘的 Win 键坏了, 按了没反应, Win 键失效了问题排查和修复 All In One
    解决手机端手机键盘遮挡下边内容问题
    powershell 不能运行cnpm
    内容农场block
    '无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称' 或 'vue不是内部或外部命令
    powershell 设置代理
    cmd powershell proxy 代理 设置
  • 原文地址:https://www.cnblogs.com/lirongyang/p/9703669.html
Copyright © 2020-2023  润新知