• selenium


    from selenium.webdriver import Chrome

    导入自定义配置模块

    from selenium.webdriver.chrome.options import Options

    创建配置对象

    chrome_options = Options()

    chrome_options.add_argument('window-size=1920x3000')#指定浏览器分辨率

    chrome_options.add_argument('--disable--gpu')#谷歌文档提高需要使用这个属性来规避bug

    chrome_options.add_argument('--hide-scrollbars')隐藏滚动条,应对一些特殊界面

    chrome_options.add_argument('blink-settings=imagesEnabled=false')不加载图片,可以提升速度

    chrome_options.add_argument('--headless')浏览器不再提供可视化界面

    linux下如果系统无界面不加这条便会启动失败

    chrome_options.add_exeprimental_option('excludeSwitches',['enable-automation'])取消浏览器驱动提示

    如果将驱动的路径设置到环境变量中,可以不用传参数options表示配置项

    driver=Chrome(r''D:jerryspiderDay3selenium模块chromedriver.exe",options=chrome_options)

    driver.get("http://www.baidu.com")访问百度

    text = driver.page_source 获取页面源代码可以从中提取数据

    driver.close()关闭浏览器

    selenium提供了很多用于解析数据的函数

    tag = driver.find_element_by_class_name("index-logo-src")

    tag = driver.find_element_by_css_selector(".index-logo-src")

    标签相关内容

    tag.text文本 tag.parent得到的是driver对象不是父标签

    tag.get_attrbute("src")

    tag.tag_name

    一些特别的查找方式

    根据链接的文本查找

    tag  = driver.find_element_by_link_text("学术")#文本完全匹配

    tag=driver.find_element_by_partial_link_text("数")文本部分匹配

    tag = driver.find_element_by_name("tj_trjao123") 查找第一个name属性为tj_trjao123的标签

    tag=driver.find_element_by_tag_name("body")查找标签名称等于body的标签

    print(tag.tag_name,tag.getattrbute(""href"),tag.text)

    所有方法都能带s,用来查找所有匹配的标签,返回值类型为列表

    嵌套查找

    tag = driver.find_element_by_name("sb")

    tag2= tag.find_element_by_tag_name("a")

    与显示有关的属性

    tag = driver.find_element_by_class_name("index-logo-src")

    print(tag.location)打印标签的布局为字典格式如{"x":123,"y":345}

    print(tag.size)不知道

    等待元素加载

    from selenium.wendriver import Chrome

    from selenium.webdriver.common.keys import Keys

    from selenium.webdriver.support.wait import WebDriverWait

    from selenium.webdriver.support import expected_contions as EC

    from selenium.webdriver.common.by import By

    当腰查找的元素不存在时,汇过一会再查找一次(轮询)知道找到为止,一旦超过10秒就会报错

    driver.implicity_wait(10)隐士等待

    key_input=driver.find_element(By.ID,"kw")等同于下面的

    key_input=driver.find_element_by_id("kw") #找到输入框

    key_input.send_keys("基佬")  #向输入框发送数据

    key_input.send_keys(Keys.ENTER) 执行回车键

    显式等待 明确的等待某一个元素 满足某个条件传入要等待的driver和等待超时时间,等待页面出现了一个id为content_left的元素位为止,最长等10秒否则报错

    WebDriverWait(driver,10).until(EC.presence_of_element_located(By.ID,"content_left"))

    获取搜索结果 如果直接获取元素,可能因为页面没有加载完毕,导致获取失败

    div = driver.find_element_by_id("conten_left")

    清空输入框:找到指定输入框

    key_input=driver.find_element_by_id("kw")

    key_input.clear()$清空输入框

    动作练

    指的是一系列动作的集合,例如滑动验证1.点击并按住2.移动鼠标3.移到指定位置释放

    from selenium.wendriver import Chrome

    from selenium.webdriver import ActionChains

    driver=Chrome()

    driver.get(url)

    driver.implicitly_wait(5)

    切换frame(指定找到当前frame的内容,如果需要找到其他frame的标签,需要切换框架)

    driver.switch_to.frame("imframeResult")

    #获取需要拖拽的标签

    tag=driver.find_element_by_id("draggable")

    #获取目标位置的标签

    tag2 = driver.find_element_by_id("froppable")

    确定移动距离

    dis=tag2.location.get('x')-tag.location.get('x')

    创建一个动作对象

    asc=ActionChains(driver)

    asc.click_and_hold(tag).perform()#点击并按住指定标签perform表示执行该动作

    asc.move_to_element(tag2).perform()移动到指定标签

    asc.release().perform()松手

    由于上述动作实在太快可能被认定为机器人

    线性移动

    asc=ActionChains(driver)

    asc.click_and_hold(tag).perform()

    #循环逐渐移动

    while tag.location['x'] < tag2.location[''x']:

      ActionChains(driver).move_by_offset(1,0).perform() #需要新创建一个对象原因不知道

    asc.release().perform()

    如果需要访问当前frame之上(父辈的内容)需要回到父级frame

    driver.switch_to.parent_frame()

    driver.find_element_by_id("textareaCode")

    执行js代码

    driver = Chrome()

    driver.get("fhuiewuhf123")

    driver.execute_script("alert("sb")")

    导航(前进后退)


    # driver.get("https://www.baidu.com")
    # driver.get("https://www.qq.com")
    # driver.get("https://www.sina.com")
    # driver.get("https://www.4399.com")
    #
    #
    # driver.back()# 后退
    # driver.forward() # 前进

    切换选项卡

    driver.execute_script("window.open()")

    print(driver.window_handles)#获取所有windows对象

    driver.switch_to.window(driver.window_handles[1])#根据索引切换

     当遇到懒加载时,可以执行js代码,滑动页面,使用selenium模块的显示等待,确保数据准确,以及准确获取标签

  • 相关阅读:
    升级edk2源码的一点补充
    关于Ubuntu系统忘记密码的解决方法合集
    UEFI Shell 下的程序设计
    Windows下EDK2环境的搭建以及经典的程序设计Print Hello World !-----(Linux下的待后续熟练了再更新)
    一个刚入行的BIOS工程师的自我简介
    反爬虫,非标准的json格式解析
    Scrapy+selenium爬取简书全站-爬虫
    Scrapy
    Python 爬取豆瓣电影Top250排行榜,爬虫初试
    Linux(Ubuntu) MySQL数据库安装与卸载
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10698216.html
Copyright © 2020-2023  润新知