精华内容
下载资源
问答
  • 什么是selenium selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera...
  • selenium库文件

    2018-05-13 14:52:33
    python selenium文件,python selenium文件,python selenium文件
  • Selenium库

    2019-04-04 09:55:45
    Selenium库 1、Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。 Selenium的核心Selenium Core...

    Selenium库

    1、Selenium

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。

    Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

    selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

    2、Selenium基本使用

    用python写爬虫的时候,主要用的是selenium的Webdriver,看下Selenium.Webdriver支持哪些浏览器

    from selenium import webdriver
    help(webdriver)
    
    >>>
    Help on package selenium.webdriver in selenium:
    
    NAME
        selenium.webdriver
    
    DESCRIPTION
        # Licensed to the Software Freedom Conservancy (SFC) under one
        # or more contributor license agreements.  See the NOTICE file
        # distributed with this work for additional information
        # regarding copyright ownership.  The SFC licenses this file
        # to you under the Apache License, Version 2.0 (the
        # "License"); you may not use this file except in compliance
        # with the License.  You may obtain a copy of the License at
        #
        #   http://www.apache.org/licenses/LICENSE-2.0
        #
        # Unless required by applicable law or agreed to in writing,
        # software distributed under the License is distributed on an
        # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
        # KIND, either express or implied.  See the License for the
        # specific language governing permissions and limitations
        # under the License.
    
    PACKAGE CONTENTS
        android (package)
        blackberry (package)
        chrome (package)
        common (package)
        edge (package)
        firefox (package)
        ie (package)
        opera (package)
        phantomjs (package)
        remote (package)
        safari (package)
        support (package)
        webkitgtk (package)
    
    VERSION
        3.14.1
    

    从结果中我们也可以看出基本山支持了常见的所有浏览器

    这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试

    声明浏览器对象

    上面我们知道了selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要声明浏览器对象

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser = webdriver.Firefox()
    

    访问页面

    eg1:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.baidu.com")
    print(browser.page_source)
    browser.close()    
    

    上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器

    3、查找元素

    单个元素查找

    eg2:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.taobao.com")
    input_first = browser.find_element_by_id("q")
    input_second = browser.find_element_by_css_selector("#q")
    input_third = browser.find_element_by_xpath('//*[@id="q"]')
    print(input_first)
    print(input_second)
    print(input_third)
    browser.close()
    

    这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。

    这里列举一下常用的查找元素方法:

    find_element_by_name
    find_element_by_id
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector 
    

    下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入

    from selenium.webdriver.common.by import By
    

    eg3:

    from selenium import webdriver
    
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Chrome()
    
    browser.get("http://www.taobao.com")
    input_first = browser.find_element(By.ID,"q")
    print(input_first)
    browser.close()                
    

    当然这种方法和上述的方式是通用的,browser.find_element(By.ID,“q”)这里By.ID中的ID可以替换为其他几个

    多个元素查找

    其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示

    eg4:

    from selenium import webdriver    
    
    browser = webdriver.Chrome()
    browser.get("http://www.taobao.com")
    lis = browser.find_elements_by_css_selector('.service-bd li')
    print(lis)
    browser.close()
    

    这样获得就是一个列表

    当然上面的方式也是可以通过导入from selenium.webdriver.common.by import By 这种方式实现

    lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
    

    同样的在单个元素中查找的方法在多个元素查找中同样存在:

    find_elements_by_name
    find_elements_by_id
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector
    

    4、元素交互操作

    对于获取的元素调用交互方法

    eg5:

    from selenium import webdriver
    
    import time
    
    browser = webdriver.Chrome()
    browser.get("http://www.taobao.com")
    input_str = browser.find_element_by_id('q')
    input_str.send_keys("ipad")
    time.sleep(1)
    input_str.clear()
    input_str.send_keys("MakBook pro")
    button = browser.find_element_by_class_name('btn-search')
    button.click()         
    

    运行的结果可以看出程序会自动打开Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索。

    Selenium所有的api文档:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

    交互动作

    将动作附加到动作链中串行执行

    eg6:

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    browser = webdriver.Chrome()
    
    url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    target = browser.find_element_by_css_selector('#droppable')
    actions = ActionChains(browser)
    actions.drag_and_drop(source, target)
    actions.perform()
    

    更多操作参考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

    执行javascript

    这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,

    下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示

    eg7:

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get("http://www.zhihu.com/explore")
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    browser.execute_script('alert("To Bottom")')
    

    5、获取信息

    获取元素属性

    get_attribute(‘class’)

    eg8:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    logo = browser.find_element_by_id('zh-top-link-logo')
    print(logo)
    print(logo.get_attribute('class'))    
    

    获取文本值

    text

    eg9:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input.text)
    

    获取ID,位置,标签名

    id
    location
    tag_name
    size

    eg10:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input.id)
    print(input.location)
    print(input.tag_name)
    print(input.size)    
    

    Frame

    在很多网页中都是有Frame标签,所以我们爬取数据的时候就涉及到切入到frame中以及切出来的问题,通过下面的例子演示
    这里常用的是switch_to.from()和switch_to.parent_frame()

    eg11:

    import time
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    browser = webdriver.Chrome()
    url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    print(source)
    try:
        logo = browser.find_element_by_class_name('logo')
    except NoSuchElementException:
        print('NO LOGO')
    browser.switch_to.parent_frame()
    logo = browser.find_element_by_class_name('logo')
    print(logo)
    print(logo.text)
    

    等待

    当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

    隐式等待

    到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

    eg12:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get('https://www.zhihu.com/explore')
    input = browser.find_element_by_class_name('zu-top-add-question')
    print(input)
    

    显式等待

    指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

    eg13:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    browser = webdriver.Chrome()
    browser.get('https://www.taobao.com/')
    wait = WebDriverWait(browser, 10)
    input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
    print(input, button)
    

    上述的例子中的条件:EC.presence_of_element_located()是确认元素是否已经出现了

    EC.element_to_be_clickable()是确认元素是否是可点击的

    常用的判断条件:

    title_is 标题是某内容
    title_contains 标题包含某内容
    presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
    visibility_of_element_located 元素可见,传入定位元组
    visibility_of 可见,传入元素对象
    presence_of_all_elements_located 所有元素加载出
    text_to_be_present_in_element 某个元素文本包含某文字
    text_to_be_present_in_element_value 某个元素值包含某文字
    frame_to_be_available_and_switch_to_it frame加载并切换
    invisibility_of_element_located 元素不可见
    element_to_be_clickable 元素可点击
    staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
    element_to_be_selected 元素可选择,传元素对象
    element_located_to_be_selected 元素可选择,传入定位元组
    element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
    element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
    alert_is_present 是否出现Alert
    

    更多操作参考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

    浏览器的前进和后退

    back()

    forward()

    eg14:

    import time
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com/')
    browser.get('https://www.taobao.com/')
    browser.get('https://www.python.org/')
    browser.back()
    time.sleep(1)
    browser.forward()
    browser.close()    
    

    cookie操作

    get_cookies()

    delete_all_cookes()

    add_cookie()

    eg15:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.zhihu.com/explore')
    print(browser.get_cookies())
    browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'})
    print(browser.get_cookies())
    browser.delete_all_cookies()
    print(browser.get_cookies())    
    

    选项卡管理

    通过执行js命令实现新开选项卡window.open()

    不同的选项卡是存在列表里browser.window_handles

    通过browser.window_handles[0]就可以操作第一个选项卡

    eg16:

    import time
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.execute_script('window.open()')
    print(browser.window_handles)
    browser.switch_to_window(browser.window_handles[1])
    browser.get('https://www.taobao.com')
    time.sleep(1)
    browser.switch_to_window(browser.window_handles[0])
    browser.get('https://python.org')
    

    异常处理

    这里的异常比较复杂,官网的参考地址:
    http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions

    这里只进行简单的演示,查找一个不存在的元素

    eg17:
    Selenium库
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException

    browser = webdriver.Chrome()
    try:
        browser.get('https://www.baidu.com')
    except TimeoutException:
        print('Time Out')
    try:
        browser.find_element_by_id('hello')
    except NoSuchElementException:
        print('No Element')
    finally:
        browser.close()
    
    展开全文
  • selenium库的安装使用

    千次阅读 2021-05-21 17:51:32
    第一步:python中安装selenium模块 ...from selenium import webdriver #从selenium库中调用webdriver模块 import time driver = webdriver.Chrome() # 设置引擎为Chrome,从本地打开一个Chrome浏览器 ti

    第一步:python中安装selenium库

    和其他所有Python库一样,selenium库需要安装

    pip install selenium # Windows电脑安装selenium
    
    pip3 install selenium # Mac电脑安装selenium
    

    第二步:下载谷歌浏览器驱动并合理放置

    selenium的脚本可以控制所有常见浏览器,在使用之前需要安装浏览器端的驱动

    注意:驱动和浏览器要版本对应

    推荐使用Chrome浏览器1谷歌浏览器驱动

    打开chrome浏览器,在网址栏中输入chrome://version/打开关于版本页面,根据版本信息下载相应chrome驱动
    在这里插入图片描述
    在这里插入图片描述

    将驱动放在python的安装目录(我的python集成在Anaconda3)
    在这里插入图片描述

    第三步:使用selenium爬取QQ音乐歌词(简单示例)

    import time
    # 本地Chrome浏览器设置方法
    from selenium import webdriver #从selenium库中调用webdriver模块
    driver = webdriver.Chrome() # 设置引擎为Chrome,从本地打开一个Chrome浏览器
    
    driver.get('https://y.qq.com/n/ryqq/songDetail/0002Pa3i2ZU2Ec') # 打开网页
    
    time.sleep(3) # 程序暂停3秒钟,等待网页加载完毕
    div_p = driver.find_element_by_id('lrc_content') # 解析网页并提取所需标签
    print(div_p.text) # 打印文本
    driver.close() # 关闭浏览器
    

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    补充一点:2021年8月13日下午补充

    在第二步中下载的chromedriver.exe文件实际可以放在任意路径下,只是不和python.exe文件同目录时,需要指明驱动的位置,代码及演示如下:

    浏览器驱动存放路径为E:\webdriver\chromedriver.exe

    # 从selenium库中调用webdriver模块
    from selenium import webdriver 
    
    # 设置引擎为Chrome并指明浏览器驱动位置,并从本地打开一个Chrome浏览器
    driver = webdriver.Chrome("E:\webdriver\chromedriver.exe") 
    
    driver.get('https://www.baidu.com')
    

    在这里插入图片描述


    1. 目前主流的浏览器中,Chrome浏览器对Selenium自动化的支持更加成熟 ↩︎

    展开全文
  • selenium库的基本使用

    2020-08-20 14:05:14
    什么是selenium selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera...

    什么是selenium

    selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)
    Selenium的核心Selenium Core基于JsUnit完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
    selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
    这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试

    selenium的基本用法

    声明浏览器对象
    上面我们知道了selenium支持很多的浏览器:

    但是如果想要声明并调用浏览器则需要:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser = webdriver.Firefox()
    

    这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用
    访问页面

    from selenium import webdriver#导入库
    browser = webdriver.Chrome()#声明浏览器
    url = 'https:www.baidu.com'
    browser.get(url)#打开浏览器预设网址
    print(browser.page_source)#打印网页源代码
    browser.close()#关闭浏览器
    

    上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器

    查找元素

    单个元素查找

    from selenium import webdriver#导入库
    browser = webdriver.Chrome()#声明浏览器
    url = 'https:www.taobao.com'
    browser.get(url)#打开浏览器预设网址
    input_first = browser.find_element_by_id('q')
    input_two = browser.find_element_by_css_selector('#q')
    print(input_first)
    print(input_two)
    

    这里我们通过2种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,结果都是相同的。
    输出如下:

    <selenium.webdriver.remote.webelement.WebElement (session="9aaa01da6545ba2013cc432bcb9abfda", element="0.5325244323105505-1")>
    <selenium.webdriver.remote.webelement.WebElement (session="9aaa01da6545ba2013cc432bcb9abfda", element="0.5325244323105505-1")>
    

    这里列举一下常用的查找元素方法:
    find_element_by_name
    find_element_by_id
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入
    from selenium.webdriver.common.by import By

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Chrome()
    url = 'https://www.taobao.com'
    browser.get(url)
    input_1 = browser.find_element(By.ID, 'q')
    print(input_1)
    

    当然这种方法和上述的方式是通用的,browser.find_element(By.ID,"q")这里By.ID中的ID可以替换为其他几个
    我个人比较倾向于css
    多个元素查找
    其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示:

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    url = 'https://www.taobao.com'
    browser.get(url)
    input = browser.find_elements_by_css_selector('.service-bd li')
    print(input)
    browser.close()
    
    

    输出为一个列表形式:

    [<selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-1")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-2")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-3")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-4")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-5")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-6")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-7")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-8")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-9")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-10")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-11")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-12")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-13")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-14")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-15")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-16")>]
    

    当然上面的方式也是可以通过导入from selenium.webdriver.common.by import By 这种方式实现
    lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
    同样的在单个元素中查找的方法在多个元素查找中同样存在:
    find_elements_by_name
    find_elements_by_id
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector
    元素交互操作
    对于获取的元素调用交互方法

    from selenium import webdriver
    import time
    browser = webdriver.Chrome()
    browser.get(url='https://www.baidu.com')
    time.sleep(2)
    input = browser.find_element_by_css_selector('#kw')
    input.send_keys('韩国女团')
    time.sleep(2)
    input.clear()
    input.send_keys('后背摇')
    button = browser.find_element_by_css_selector('#su')
    button.click()
    time.sleep(10)
    browser.close()
    

    运行的结果可以看出程序会自动打开Chrome浏览器并打开百度页面输入韩国女团,然后删除,重新输入后背摇,并点击搜索
    Selenium所有的api文档:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
    交互动作
    将动作附加到动作链中串行执行

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    browser = webdriver.Chrome()
    
    url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    target = browser.find_element_by_css_selector('#droppable')
    actions = ActionChains(browser)
    actions.drag_and_drop(source, target)
    actions.perform()
    

    更多操作参考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
    执行JavaScript
    这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,
    下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get("http://www.zhihu.com/explore")
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    browser.execute_script('alert("To Bottom")')
    

     


    获取元素属性
    get_attribute('class')

     

    from selenium import webdriver
    import time
    browser = webdriver.Chrome()
    browser.get("http://www.zhihu.com/explore")
    logo = browser.find_element_by_css_selector('.zu-top-link-logo')
    print(logo)
    print(logo.get_attribute('class'))
    print(logo.get_attribute('id'))
    time.sleep(2)
    browser.quit()
    

    输出如下:

    <selenium.webdriver.remote.webelement.WebElement (session="b72dbd6906debbca7d0b49ab6e064d92", element="0.511689875475734-1")>
    zu-top-link-logo
    zh-top-link-logo
    

    获取文本值
    text

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get("http://www.zhihu.com/explore")
    logo = browser.find_element_by_css_selector('.zu-top-link-logo')
    print(logo)
    print(logo.text)
    
    

    输出如下:

    <selenium.webdriver.remote.webelement.WebElement (session="ce8814d69f8e1291c88ce6f76b6050a2", element="0.9868611170776878-1")>
    知乎
    

    获取ID,位置,标签名
    id
    location
    tag_name
    size

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    url = 'https://www.zhihu.com/explore'
    browser.get(url)
    input = browser.find_element_by_css_selector('.zu-top-add-question')
    print(input.id)
    print(input.location)
    print(input.tag_name)
    print(input.size)
    

    输出如下:

    0.022998219885927318-1
    {'x': 759, 'y': 7}
    button
    {'height': 32, 'width': 66}
    

     

    展开全文
  • selenium库介绍

    千次阅读 2019-03-01 09:39:11
    selenium库介绍

    selenium库介绍

    一、什么是Selenium
    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

    selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

    二、selenium基本使用
    用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器

    执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:

    这里要说一下比较重要的PhantomJS,PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试

    声明浏览器对象
    上面我们知道了selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要:

    from selenium import webdriver

    browser = webdriver.Chrome()
    browser = webdriver.Firefox()
    这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用

    访问页面
    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()

    browser.get(“http://www.baidu.com”)
    print(browser.page_source)
    browser.close()
    复制代码
    上述代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器

    查找元素
    单个元素查找

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()

    browser.get(“http://www.taobao.com”)
    input_first = browser.find_element_by_id(“q”)
    input_second = browser.find_element_by_css_selector("#q")
    input_third = browser.find_element_by_xpath(’//*[@id=“q”]’)
    print(input_first)
    print(input_second)
    print(input_third)
    browser.close()
    复制代码
    这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。
    结果如下:

    这里列举一下常用的查找元素方法:

    find_element_by_name
    find_element_by_id
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector

    下面这种方式是比较通用的一种方式:这里需要记住By模块所以需要导入
    from selenium.webdriver.common.by import By

    复制代码
    from selenium import webdriver

    from selenium.webdriver.common.by import By

    browser = webdriver.Chrome()

    browser.get(“http://www.taobao.com”)
    input_first = browser.find_element(By.ID,“q”)
    print(input_first)
    browser.close()
    复制代码
    当然这种方法和上述的方式是通用的,browser.find_element(By.ID,“q”)这里By.ID中的ID可以替换为其他几个

    多个元素查找

    其实多个元素和单个元素的区别,举个例子:find_elements,单个元素是find_element,其他使用上没什么区别,通过其中的一个例子演示:

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.get(“http://www.taobao.com”)
    lis = browser.find_elements_by_css_selector(’.service-bd li’)
    print(lis)
    browser.close()
    复制代码
    这样获得就是一个列表

    当然上面的方式也是可以通过导入from selenium.webdriver.common.by import By 这种方式实现

    lis = browser.find_elements(By.CSS_SELECTOR,’.service-bd li’)

    同样的在单个元素中查找的方法在多个元素查找中同样存在:
    find_elements_by_name
    find_elements_by_id
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector

    元素交互操作
    对于获取的元素调用交互方法

    复制代码
    from selenium import webdriver

    import time

    browser = webdriver.Chrome()
    browser.get(“http://www.taobao.com”)
    input_str = browser.find_element_by_id(‘q’)
    input_str.send_keys(“ipad”)
    time.sleep(1)
    input_str.clear()
    input_str.send_keys(“MakBook pro”)
    button = browser.find_element_by_class_name(‘btn-search’)
    button.click()
    复制代码
    运行的结果可以看出程序会自动打开Chrome浏览器并打开淘宝输入ipad,然后删除,重新输入MakBook pro,并点击搜索

    Selenium所有的api文档:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

    交互动作

    将动作附加到动作链中串行执行

    复制代码
    from selenium import webdriver
    from selenium.webdriver import ActionChains

    browser = webdriver.Chrome()

    url = “http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
    browser.get(url)
    browser.switch_to.frame(‘iframeResult’)
    source = browser.find_element_by_css_selector(’#draggable’)
    target = browser.find_element_by_css_selector(’#droppable’)
    actions = ActionChains(browser)
    actions.drag_and_drop(source, target)
    actions.perform()
    复制代码
    更多操作参考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

    执行JavaScript
    这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,
    下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get(“http://www.zhihu.com/explore”)
    browser.execute_script(‘window.scrollTo(0, document.body.scrollHeight)’)
    browser.execute_script(‘alert(“To Bottom”)’)
    获取元素属性
    get_attribute(‘class’)

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    url = ‘https://www.zhihu.com/explore
    browser.get(url)
    logo = browser.find_element_by_id(‘zh-top-link-logo’)
    print(logo)
    print(logo.get_attribute(‘class’))
    复制代码
    获取文本值
    text

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    url = ‘https://www.zhihu.com/explore
    browser.get(url)
    input = browser.find_element_by_class_name(‘zu-top-add-question’)
    print(input.text)
    复制代码
    获取ID,位置,标签名
    id
    location
    tag_name
    size

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    url = ‘https://www.zhihu.com/explore
    browser.get(url)
    input = browser.find_element_by_class_name(‘zu-top-add-question’)
    print(input.id)
    print(input.location)
    print(input.tag_name)
    print(input.size)
    复制代码
    Frame
    在很多网页中都是有Frame标签,所以我们爬取数据的时候就涉及到切入到frame中以及切出来的问题,通过下面的例子演示
    这里常用的是switch_to.from()和switch_to.parent_frame()

    复制代码
    import time
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException

    browser = webdriver.Chrome()
    url = ‘http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
    browser.get(url)
    browser.switch_to.frame(‘iframeResult’)
    source = browser.find_element_by_css_selector(’#draggable’)
    print(source)
    try:
    logo = browser.find_element_by_class_name(‘logo’)
    except NoSuchElementException:
    print(‘NO LOGO’)
    browser.switch_to.parent_frame()
    logo = browser.find_element_by_class_name(‘logo’)
    print(logo)
    print(logo.text)
    复制代码
    等待
    当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

    隐式等待
    到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get(‘https://www.zhihu.com/explore’)
    input = browser.find_element_by_class_name(‘zu-top-add-question’)
    print(input)
    复制代码
    显示等待

    指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

    复制代码
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    browser = webdriver.Chrome()
    browser.get(‘https://www.taobao.com/’)
    wait = WebDriverWait(browser, 10)
    input = wait.until(EC.presence_of_element_located((By.ID, ‘q’)))
    button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ‘.btn-search’)))
    print(input, button)
    复制代码
    上述的例子中的条件:EC.presence_of_element_located()是确认元素是否已经出现了
    EC.element_to_be_clickable()是确认元素是否是可点击的

    常用的判断条件:
    title_is 标题是某内容
    title_contains 标题包含某内容
    presence_of_element_located 元素加载出,传入定位元组,如(By.ID, ‘p’)
    visibility_of_element_located 元素可见,传入定位元组
    visibility_of 可见,传入元素对象
    presence_of_all_elements_located 所有元素加载出
    text_to_be_present_in_element 某个元素文本包含某文字
    text_to_be_present_in_element_value 某个元素值包含某文字
    frame_to_be_available_and_switch_to_it frame加载并切换
    invisibility_of_element_located 元素不可见
    element_to_be_clickable 元素可点击
    staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
    element_to_be_selected 元素可选择,传元素对象
    element_located_to_be_selected 元素可选择,传入定位元组
    element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
    element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
    alert_is_present 是否出现Alert

    更多操作参考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

    浏览器的前进和后退
    back()
    forward()

    复制代码
    import time
    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.get(‘https://www.baidu.com/’)
    browser.get(‘https://www.taobao.com/’)
    browser.get(‘https://www.python.org/’)
    browser.back()
    time.sleep(1)
    browser.forward()
    browser.close()
    复制代码
    cookie操作
    get_cookies()
    delete_all_cookes()
    add_cookie()

    复制代码
    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.get(‘https://www.zhihu.com/explore’)
    print(browser.get_cookies())
    browser.add_cookie({‘name’: ‘name’, ‘domain’: ‘www.zhihu.com’, ‘value’: ‘zhaofan’})
    print(browser.get_cookies())
    browser.delete_all_cookies()
    print(browser.get_cookies())
    复制代码
    选项卡管理
    通过执行js命令实现新开选项卡window.open()
    不同的选项卡是存在列表里browser.window_handles
    通过browser.window_handles[0]就可以操作第一个选项卡

    复制代码
    import time
    from selenium import webdriver

    browser = webdriver.Chrome()
    browser.get(‘https://www.baidu.com’)
    browser.execute_script(‘window.open()’)
    print(browser.window_handles)
    browser.switch_to_window(browser.window_handles[1])
    browser.get(‘https://www.taobao.com’)
    time.sleep(1)
    browser.switch_to_window(browser.window_handles[0])
    browser.get(‘https://python.org’)
    复制代码
    异常处理
    这里的异常比较复杂,官网的参考地址:
    http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions
    这里只进行简单的演示,查找一个不存在的元素

    复制代码
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException, NoSuchElementException

    browser = webdriver.Chrome()
    try:
    browser.get(‘https://www.baidu.com’)
    except TimeoutException:
    print(‘Time Out’)
    try:
    browser.find_element_by_id(‘hello’)
    except NoSuchElementException:
    print(‘No Element’)
    finally:
    browser.close()
    复制代码

    所有的努力都值得期许,每一份梦想都应该灌溉!

    展开全文
  • 初学者在做python自动化时,经常会遇到找不到库情形,如下图...安装selenium库 装完之后,项目解释器下变会出现selenium 此时代码中红色提示消失,可以正常使用 方法二:直接修改Project Interpreter 为python目录...
  • 主要介绍了Python中Selenium库使用教程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Python Selenium库的使用

    万次阅读 多人点赞 2018-03-07 21:50:29
    (一)Selenium基础 入门教程:Selenium官网教程 1.Selenium简介 Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无...
  • Selenium库使用

    2020-02-04 21:07:34
    Selenium库的安装与使用2.1 Selenium库的安装2.2 Selenium库的使用 Selenium库是一个自动化测试工具,能够驱动浏览器模拟人的操作,如鼠标单击、键盘输入等。通过Selenium库能够比较容易地获取网页的源代码,还可以...
  • 有没有人指导下,刚入门自动化测试,显示没有selenium库是为什么啊 我cmd窗口里查看已经安装了啊
  • 使用selenium库之前,需要安装Python3 Python3环境搭建 参考:https://www.runoob.com/python3/python3-install.html 安装Selenium库 访问:https://pypi.org/project/selenium/#files 点击扩展名为.gz的源码包进行...
  • 用python+selenium库爬洛谷题库(人生第一个爬虫)心得代码 心得 开始前的工作: 我选择用scrapy框架来写爬虫,安装scrapy框架也是一个挺艰辛的路程。我先尝试不用国内镜像网站来安装,果然不行;然后使用国内镜像...
  • python的selenium库安装和使用

    千次阅读 2019-10-08 12:46:10
    这时候我们可以转换一下思路,我们直接操作浏览器进行操作,那么就可以使用Python提供的一个库selenium,直接操作浏览器。 selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正...
  • Selenium库的安装

    2019-12-23 11:38:59
    Selenium库的安装 安装方式一: PyPI 网站下载安装 https://pypi.python.org/simple/selenium 安装方式二:pip install selenium==3.8.0 官方参考文档:http://selenium-python.readthedocs.io/index.html 浏览器...
  • ​ 通过前文爬虫理论结合实战的部分我们对爬虫有了初步的了解,首先通过requests模拟浏览器进行请求,接着通过正则表达式或者解析库对网页进行解析,还知道了动态网页Ajax的...一、Selenium库介绍 1.Selenium简介 ...
  • selenium 最初是一个用于自动化调试网页的工具,但是后来人们发现,这东西可以用来做爬虫,抓取需要 js 脚本的网页。我们可以使用 pip 直接安装 selenium:pip install seleniumselenium 必须和浏览器配合使用,...
  • 在windows+anaconda3环境下安装selenium 第一步:找到Anaconda下的 Prompt,输入pip install selenium,按enter进行安装。 第二步:下载谷歌浏览器,查看谷歌浏览器的版本:浏览器右上角——帮助——关于Google ...
  • Python selenium库爬取淘宝网商品信息

    千次阅读 2020-07-21 15:11:04
    selenium、pyquery、爬虫开发实战
  • 上网后发现了selenium的一个,觉得挺强大的,但是安装过程中出现了一些小问题,于是写下文章记录一下。 安装 像其他的一样安装 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 错误 错误...
  • 在刚接触selenium库时,一开始就遇到了比较大的问题,可能遇到异常退出,或者找不到文件等情况,很多问题都是没有配置环境,或者没有下载浏览器驱动的问题,在此总结一下。 1.安装python和selenium 详情请看链接:...
  • Python爬虫之Selenium库的使用

    万次阅读 多人点赞 2019-02-03 22:02:43
    Selenium是一个自动化测试工具,支持各种浏览器,包括Chrome、Firefox等主流浏览器。使用它就可以模拟浏览器进行各种操作,包括用它来爬取一些内容。当你看到浏览器自己运行并且在网页上翻页或者跳转的时候,应该会...
  • selenium 可以在浏览器模拟用户真实操作。这是一篇 selenium 入门笔记,包括安装、安装浏览器依赖、配置环境。并通过百度搜索实例进行一些基础操作。
  • selenium.cr:水晶的Selenium库
  • selenium库的安装及webdriver的配置

    千次阅读 2020-02-08 11:44:15
    selenium安装 win+R,输入cmd,进入命令行,然后输入 pip install selenium webdriver的配置 这里我们安装chrome的webdriver使用 首先查看你的谷歌浏览器的版本chrome://version/ 例如: 然后参照版本,我们下载...
  • 现在很多网站为防止爬虫,加载的数据都使用js的方式加载,如果使用python的request库爬取的话就爬不到数据,selenium库能模拟打开浏览器,浏览器打开网页并加载js数据后,再获取数据,这样就达到反反爬虫,selenium...
  • 在用Python爬取网页的过程中会用到selenium库这里记录一下selenium库的安装过程和Google浏览器配置 在pycharm中未安装selenium库时会出现如下图所示的情况: 运行时会出现No module named ‘selenium’错误 ...
  • 目录 Selenium简介 Selenium-WEB自动化工具 安装 python安装selenium命令: 下载chromedriver.exe 选择 chromedriver_win32.zip 进行下载 将下载的chromedriver.exe 放到python的安装目录下,如下所示 设置系统环境...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,842
精华内容 12,336
关键字:

selenium库