添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
深沉的黑框眼镜  ·  python - ...·  3 周前    · 
强健的太阳  ·  QMessageBox类·  7 月前    · 
温文尔雅的卡布奇诺  ·  Request scope vs ...·  9 月前    · 
  • 指定某个条件,然后设置最长等待时间,每隔一定时间检查一次(默认0.5秒)
  • 如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出超时异常:TimeoutException
  • WebDriverWait(driver, timeout, poll_frequency,igonred_exceptions).until(method, message)
  • driver:WebDriver的实例
  • timeout: 等待的最长时间
  • poll_frequency:调用until中的方法的间隔时间,默认0.5秒
  • igonred_exceptions:忽略的异常,如果在调用until的过程中抛出这个元组中的异常,则不中断代码,继续等待
  • 等待条件:expected_conditions

  • 这两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, 'kw'),一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行
  • presence_of_element_located (这个用的次数最多)
  • presence_of_all_elements_located
  • 这两个条件类验证title,验证传入的参数title是否等于或包含于driver
  • title_is
  • title_contains
  • 这三个条件验证元素是否可见,前两个传入参数是元组类型的locator,第三个传入WebElement
  • visibility_of_element_located
  • invisibility_of_element_located
  • visibility_of
  • 判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • 判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
  • frame_to_be_available_and_switch_to_it
  • 判断是否有alert出现
  • alert_is_present
  • 判断元素是否可点击,传入locator
  • element_to_be_clickable
  • 设置一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步
  • 隐性等待对整个driver的周期都起作用,所以只要设置一次即可,默认等待时间为0
  • driver.implicitly_wait(10) #隐式等待,最长10s
  • 程序会一直等待整个页面加载完成,就算你需要的元素加载出来了还是需要等待
  • 也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步
  • 隐性等待和显性等待可以同时用,等待的最长时间取两者之中的最大者

    动作链 示例 回到目录

    导入ActionChains:from selenium.webdriver.common.action_chains import ActionChains

  • 执行链中的所有动作
  • perform()
  • 点击鼠标左键,按住不放
  • click_and_hold(on_element=None)
  • 在某个元素位置松开鼠标左键
  • release(on_element=None)
  • 将鼠标移动到当前鼠标位置的偏移位置
  • move_by_offset(xoffset, yoffset)
  • 将鼠标移动到距某个元素多少距离的位置
  • move_to_element_with_offset(to_element, xoffset, yoffset)
  • 拖拽到某个元素然后松开
  • drag_and_drop(source, target)
  • 拖拽到某个坐标然后松开
  • drag_and_drop_by_offset(source, xoffset, yoffset)
  • 鼠标移动到某个元素
  • move_to_element(to_element)
  • 双击鼠标左键
  • double_click(on_element=None)
  • 单击鼠标右键
  • context_click(on_element=None)
  • 鼠标左键单击传入的元素
  • click(on_element=None)
  • add_cookie()
  • 添加cookie前需要先打开任意一个网页
  • 否则会报错:InvalidCookieDomainException: Message: invalid cookie domain
  • 删除Cookie
  • delete_all_cookies()
  • Cookie键名
  • name:cookie的名称
  • value:cookie对应的值
  • domain:服务器域名
  • expiry:cookie有效终止日期
  • path:path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的cookie
  • httpOnly:防脚本攻击
  • secure:规定cookie只能在https协议下才能够发送到服务器
  • 普通浏览器,js 中,window.navigator.webdriver 为 undefined
  • Selenium ,js 中,window.navigator.webdriver 为 True
  • webdriver.ChromeOptions().add_experimental_option('excludeSwitches', ['enable-automation'])
    driver.get("http://news.baidu.com/") print('执行js打开新窗口前') print('所有窗口的句柄:', driver.window_handles) print('当前窗口的句柄:', driver.current_window_handle) # 执行js打开新窗口 new_js = 'window.open("https://www.toutiao.com/")' driver.execute_script(new_js) print('执行js打开新窗口后') all_handle = driver.window_handles print('所有窗口的句柄:', all_handle) print('当前窗口的句柄:', driver.current_window_handle) print('切换句柄...') driver.switch_to.window(all_handle[1]) print('当前窗口的句柄:', driver.current_window_handle) # 页面高度 height = 0 # 执行js滑动滚动条 while height < 10000: # 滑动滚动条到指定位置 driver.execute_script('document.documentElement.scrollTop=10000') # 页面高度 height = driver.execute_script('return document.body.scrollHeight') time.sleep(2) # 关闭新打开的窗口 driver.close() finally: time.sleep(3) # 关闭浏览器 driver.quit() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("https://qzone.qq.com/") time.sleep(0.5) """通过元素定位,切到指定frame(登录框) frame = driver.find_element(By.XPATH,'//iframe') driver.switch_to.frame(frame) # 也可通过 ID 或 name 定位 frame driver.switch_to.frame('login_frame') # 点击 帐号密码登录 driver.find_element(By.LINK_TEXT, '帐号密码登录').click() time.sleep(0.5) text_box = driver.find_element(By.ID, 'u') # 输入内容 text_box.send_keys('0123456789') time.sleep(1) # 清除内容 text_box.clear() time.sleep(1) text_box.send_keys('正确的账号') password_box = driver.find_element(By.CSS_SELECTOR, '.inputstyle.password') password_box.send_keys('正确的密码') time.sleep(1.5) # 执行键盘操作:回车键 password_box.send_keys(Keys.ENTER) time.sleep(7) finally: time.sleep(3) # 关闭浏览器 driver.quit()

    页面弹窗、截图、获取元素属性 回到目录

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
        driver.get("https://www.baidu.com/")
        time.sleep(0.3)
        driver.find_element_by_link_text('设置').click()
        time.sleep(0.3)
        driver.find_element_by_link_text('搜索设置').click()
        time.sleep(0.3)
        driver.find_element_by_link_text('保存设置').click()
        time.sleep(1)
        #   获取弹窗的对象
        alert_box = driver.switch_to.alert
        #   获取弹窗的内容
        print('弹窗内容:',alert_box.text)
        #   对弹窗对象的确定操作
        alert_box.accept()
        #   按钮:百度一下
        button = driver.find_element_by_css_selector('[type="submit"]')
        #   获取元素标签上的属性
        print('get_attribute:', button.get_attribute('value'))
        #   元素的坐标
        print('location:', button.location)
        #   元素的大小
        print('size:', button.size)
        #   截图
        driver.get_screenshot_as_file('1.png')
    finally:
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    

    设置窗口大小、获取网页源代码、刷新页面 回到目录

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
        driver.get("https://www.toutiao.com/")
        time.sleep(1)
        # 最小化
        driver.minimize_window()
        time.sleep(1)
        # 设置窗口具体的大小
        driver.set_window_size(500,500)
        time.sleep(1)
        # 设置窗口位置
        driver.set_window_position(800,200)
        time.sleep(1)
        # 最大化
        driver.maximize_window()
        time.sleep(1)
        # 打印网页源码(JS渲染过的)
        print(driver.page_source)
        # 刷新当前页面
        driver.refresh()
    finally:
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    

    Cookie操作 回到目录

    import time
    import json
    from selenium import webdriver
    driver = webdriver.Chrome()
        driver.get('https://www.cnblogs.com/')
        """获取Cookie
        # 等待60秒用于手动登录
        time.sleep(60)
        # 保存获取到的Cookie
        cookies = driver.get_cookies()
        with open('1.txt', 'w+') as f:
            f.write(json.dumps(cookies))
        """添加Cookie
        with open('1.txt') as f:
            cookies = json.loads(f.read())
        # 添加cookie前需要先打开任意一个网页
        # 然后再进行添加
        # 否则会报错:InvalidCookieDomainException: Message: invalid cookie domain
        for cookie in cookies:
            driver.add_cookie(cookie)
        # 添加完毕后,再打开对应网页,便是已登录状态
        driver.get('https://www.cnblogs.com/')
        time.sleep(5)
        """清空cookie
        driver.delete_all_cookies()
        # 清空cookie后是未登录的状态
        driver.get('https://www.cnblogs.com/')
    finally:
        time.sleep(3)
        driver.quit()
    

    设置代理、UA 回到目录

    import time
    from selenium import webdriver
    opt = webdriver.ChromeOptions()
    #   设置代理
    opt.add_argument('--proxy-server=http://121.40.162.239:808')
    #   设置UA
    opt.add_argument('User-Agent=ABCDEFG')
    driver = webdriver.Chrome(options=opt)
        driver.get('http://httpbin.org/get')
    finally:
        time.sleep(3)
        driver.quit()
    

    等待加载 回到目录

    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    driver = webdriver.Chrome()
        driver.get('https://www.python.org/getit/')
        # 显式等待的等待条件  -->  参数为数组类型
        method = EC.presence_of_element_located((By.LINK_TEXT, 'Downloads'))
        # 显式等待
        WebDriverWait(driver, 20, 0.2).until(method)
        # 隐式等待
        # driver.implicitly_wait(20)
        driver.find_element(By.LINK_TEXT, 'Downloads').click()
    finally:
        time.sleep(10)
        driver.quit()
    

    动作链 回到目录

    import time
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    driver = webdriver.Chrome()
        driver.get('http://www.treejs.cn/v3/demo/cn/exedit/drag.html')
        time.sleep(2)
        # 定位元素
        element = driver.find_element_by_id('treeDemo_2_span')
        target = driver.find_element_by_id('treeDemo_12_span')
        #   动作链:拖拽
        ActionChains(driver).drag_and_drop(element,target).perform()
    finally:
        time.sleep(10)
        driver.quit()
    

    跳过Selenium检测 回到目录

    import time
    from selenium import webdriver
    opt = webdriver.ChromeOptions()
    # 方法一
    # opt.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = webdriver.Chrome(options=opt)
    # 方法二
    # # 清除selenium webdriver的值
    # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    #     "source": """
    #     Object.defineProperty(navigator,'webdriver',{
    #         get:()=>undefined
    #     })
    #     """
        driver.get('http://www.baidu.com')
    finally:
        time.sleep(10)
        driver.quit()
    
  •