zoukankan      html  css  js  c++  java
  • Selenium使用方法整理

      我采用的事Python来使用selenium库,同时jiava也可以使用,但不如python操作起来方便,下文都会以python学习selenium过程中收集到的方法。

      一:安装

      首先python先要安装selenium

      pip install Selenium

      第二步,下载对应的浏览器驱动,我这里用chrome(推荐),对应的驱动下载地址:

      http://chromedriver.storage.googleapis.com/index.html

      驱动版本要与chrome版本对应,但是建议直接用最新的chrom,然后驱动也下载目前最新的就可以了,然后把下载下来的chromedriver。exe文件放到环境变量的路径下,确保python能正确调用到。

      二:基于用法

      导入:

      from selenium import webdriver
     1.获取driver对象
       driver =webdriver.Chrome()
     如果要设置参数,则要创建一个option对象并作为参数传入构造函数中:
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument('disable-infobars') #取消浏览器打开时显示的正在监控提示
    chromeOptions.add_argument('--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0') #添加User-Agent
    chromeOptions.add_argument("--proxy-server=http://127.0.0.1") #添加代理
    chromeOptions.add_argument('--headless') #浏览器后台运行模式
    driver = webdriver.Chrome(options=chromeOptions)

      2.基本操作

      

    driver.maximize_window() #浏览器最大化 (默认是小窗口)
    driver.minimize_window() #浏览器最小化
    driver.set_page_load_timeout(20) #超时时间,如果设置了,超过时间会自动停止
    driver.get("http://www.baidu.com") #访问网站
    driver.refresh() #刷新网站
    js='window.open("https://www.baidu.com");' #通过执行js,开启一个新的窗口
    driver.execute_script(js)
    driver.switch_to.window(driver.window_handles[1])#切换浏览器中的窗口,window_handles返回当前窗口集合,这里代表切换到第二个窗口,如果不存在第二个窗口,会报错
    driver.getTitle() #获取当前窗口标题名
    driver.current_window_handle #获得当前窗口对象
    driver.current_url #当前url
    driver.page_source #当前页面源代码
    driver.close() #关闭当前窗口
    driver.quit() #关闭整个浏览器

      三.查找元素

      基础查找

      

    driver.get("https://www.baidu.com") 
    kw = find_element_by_id("kw") #通过id查找html元素, 对应百度搜索框
    su = driver.find_element_by_id("su") #点击搜索按钮
    kw.send_keys("搜索一下") #元素可以使用该方法自动填充输入框的内容
    su.click() #元素可以使用该方法点击自身
    
    #其他查找方法
    find_element_by_name() #通过name属性查找html元素
    find_element_by_class_name() #通过class属性中存在的值查找html元素
    find_element_by_tag_name() #通过查找标签找到元素,如传入"p", "input"等,不推荐使用
    
    #还有其他很多方法,以上均返回单个元素,element加上s则为返回多个符合条件的元素
    find_elements_by_name()

      进阶查找

      一.xpath查找

      xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素的路径来完成对元素的查找,HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。

      1.1 Xpath的绝对路径定位

      利用html标签名的层级关系来定位元素的绝对路径,下表数字可以在多个同样标签中选中,一般从<html>标签开始依次进行查找。如: 

     find_element_by_xpath("/html/body/div[1]/form/span[1]/input")

    1.2Xpaht利用元素属性与值定位

    find_element_by_xpath("//input[@id='kw']")
    find_element_by_xpath("//*[@name='wd']")

      1.3混合定位

    find_element_by_xpath("//form[@id='form']/span/input")

      二.CSS选择器

    driver.find_element_by_css_selector(".btn")
    driver.find_element_by_css_selector("#su")

      通过属性或组合方法:

    driver.find_element_by_css_selector("input[name='kw']").send_keys("Python")
    driver.find_element_by_css_selector("span.bg.btn_default>input#su").click()

      四.鼠标键盘操作

      selenium提供了ActionChains类来处理鼠标,键盘事件,如鼠标移动,点击,拖拽,键盘按下抬起等。需要导入如下、

    from selenium.webdriver.common.action_chains import ActionChains

      ActionChains方法列表:

    click(on_element=None) ——单击鼠标左键
    click_and_hold(on_element=None) ——点击鼠标左键,不松开
    context_click(on_element=None) ——点击鼠标右键
    double_click(on_element=None) ——双击鼠标左键
    drag_and_drop(source, target) ——拖拽到某个元素然后松开
    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
    key_down(value, element=None) ——按下某个键盘上的键
    key_up(value, element=None) ——松开某个键
    move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
    move_to_element(to_element) ——鼠标移动到某个元素
    move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
    perform() ——执行链中的所有动作
    release(on_element=None) ——在某个元素位置松开鼠标左键
    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

      链式写发:

    su = find_element_by_id("su")
    ActionChains(driver).move_to_element(su).click(su).perform()

      分步写法

    su = find_element_by_id("su")
    actions = ActionChains(driver)
    actions.move_to_element(su)
    actions.click(su)
    actions.perform()

      控制键盘示例:

    ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform() #按下Ctrl键然后松开

      执行js:

    driver.execute_script("window.scrollTo(0,100)")
    driver.execute_script("document.getElementById("kw").value="selenium"")

      五.其他

      禁止图片及js加载

      

    from selenium import webdriver
    options = webdriver.ChromeOptions()
    prefs = {
        'profile.default_content_setting_values': {
             'images': 2,
             'javascript': 2,
        }
    } #2是禁用, 1是允许
    options.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(chrome_options=options)  

    隐藏window.navigator.webdriver特征参数 (有时候能反爬)

    from selenium.webdriver import Chrome
    from selenium.webdriver import ChromeOptions
    
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = Chrome(options=option)

      





















  • 相关阅读:
    iOS:转载:UIControl的使用
    iOS:UIPickerView选择器的使用
    iOS:NSDate的主要几种时间形式
    iOS:步进UIStepper、滑动块UISlider、开关UISwitch的基本使用
    SAP 中 Webservice的发布和调用过程。
    SAP 播放语言 转载自http://www.cnblogs.com/sapSB/p/6043129.html
    根据剪贴板获取剪贴板的信息
    工单组件更改BAPI
    交货单实际发货日期修改
    水一贴
  • 原文地址:https://www.cnblogs.com/zhaoyang110/p/12760860.html
Copyright © 2011-2022 走看看