zoukankan      html  css  js  c++  java
  • Selenium模块的使用(二)

    selenium处理iframe
    - 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
    - 动作链(拖动):from selenium.webdriver import ActionChains
    - 实例化一个动作链对象:action = ActionChains(bro)
    - click_and_hold(div):长按且点击操作
    - move_by_offset(x,y)
    - perform()让动作链立即执行
    - action.release()释放动作链对象

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    import time
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    bro.get('https://c.runoob.com/front-end/61')
    # iframe标签 可在当前页面下嵌套子页面
    # 获得当前页面的子页面的标签
    bro.switch_to.frame('iframeResult')  # 改变浏览器标签定位的作用域
    div = bro.find_element_by_id('ha')
    action = ActionChains(bro) # 实例化动作链
    action.click_and_hold(div) # 点击长按指定的标签
    for i in range(5):
        # move_by_offse(x,y) x水平方向 y竖直方向 移动
        # perform() 执行动作链操作
        action.move_by_offset(16,0).perform()
        time.sleep(0.3)
    
    # 释放动作链
    action.release()
    bro.quit()

    Selenium实现模拟登录

    示例:QQ空间模拟登录

    from selenium import webdriver
    import time
    bro = webdriver.Chrome(executable_path='./chromedriver')
    # 发送请求
    bro.get('https://qzone.qq.com/')
    
    # # 改变浏览器标签定位的作用域
    bro.switch_to.frame('login_frame')
    
    # 点击账号密码登陆
    btn = bro.find_element_by_id('switcher_plogin')
    
    # 点击按钮
    btn.click()
    time.sleep(1)
    
    # 找到用户名 密码输入框
    user = bro.find_element_by_id('u')
    pwd = bro.find_element_by_id('p')
    
    # 输入用户名 密码
    user.send_keys('1121434897')
    time.sleep(1)
    pwd.send_keys('123456')
    time.sleep(1)
    
    # 找到登录按钮
    submit = bro.find_element_by_id('login_button')
    
    # 点击按钮
    submit.click()
    time.sleep(2)
    bro.quit()

    检测规避

    现在不少大网站有对selenium采取了监测机制。比如正常情况下我们用浏览器访问淘宝等网站的 window.navigator.webdriver的值为

    undefined。而使用selenium访问则该值为true。那么如何解决这个问题呢?

    只需要设置Chromedriver的启动参数即可解决问题。在启动Chromedriver之前,

    为Chrome开启实验性功能参数excludeSwitches,它的值为[‘enable-automation’],完整代码如下:

    from selenium.webdriver import Chrome
    from selenium.webdriver import ChromeOptions
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = Chrome(options=option)
  • 相关阅读:
    【2020-04-14】吃一折,长一智吧
    对“沟通成本”模型的一个重新假设
    【2020-04-13】稀缺才能让人珍惜
    【2020-04-12】决策都是当前认知的反映
    hhhhh我进步啦!
    求后序遍历(信息学奥赛一本通 1339)
    数的划分(信息学奥赛一本通 1304 洛谷 1025)
    memset函数怎么用嘞↓↓↓
    stack函数怎么用嘞?↓↓↓
    终于开通博客啦!
  • 原文地址:https://www.cnblogs.com/sxy-blog/p/13215544.html
Copyright © 2011-2022 走看看