zoukankan      html  css  js  c++  java
  • selenium模块

    载入开车模块
    from selenium import webdriver

    driver = webdriver.PhantomJS(executable_path='路径')
    driver.get(url)
    进入开车模式

    使用代理:
    (1)
    service_args = [
    '--proxy=%s' % ip_html, # 代理 IP:prot (eg:192.168.0.28:808)
    '--proxy-type=http’, # 代理类型:http/https
    ‘--load-images=no’, # 关闭图片加载(可选)
    '--disk-cache=yes’, # 开启缓存(可选)
    '--ignore-ssl-errors=true’ # 忽略https错误(可选)
    ]

    driver = webdriver.PhantomJS(service_args=service_args)
    (2)
    from selenium import webdirver
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152")

    Cookies:
    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get(https://www.zhihu.com/explore)
    #添加cookie参数
    driver.add_cookie({'name':'name','domain':'www.zhihu.com','value':'germey'})
    #删除全部cookie参数
    driver.delete_all_cookie()

    添加插件:
    # 添加xpath helper应用

    from selenium import webdriver
    chrome_options = webdriver.ChromeOptions()

    # 设置好应用扩展
    extension_path = 'D:/extension/XPath-Helper_v2.0.2.crx'
    chrome_options.add_extension(extension_path)

    # 启动浏览器,并设置好wait
    browser = webdriver.Chrome(chrome_options=chrome_options)

    处理JavaScript,Ajax加载问题:

    (1)隐式等待(网速问题):
    from selenium import webdriver

    driver = webdirver.Chrome()
    driver.implicitily_wait(10)
    driver.get(url)
    content = driver.find_element_by_class_name('zu-top-add-question')

    (2)设置智能/显示等待:
    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
    from selenium.common.exceptions import NoSuchElementException

    driver = webdriver.Chrome()
    driver.get(url)
    try:
    element = WebDriverWait(driver,10)
    content = element.until(EC.presence_of_element_located((By.检索键名,'键值')))
    button = element.until(EC.element_to_be_clickable(By.CSS_selector,'bin-search'))
    except NoSuchElementException:
    print('找不到元素的异常')

    详解:通过WebDriverWait(driver,超时时长,调用频率,忽略异常)
    element.until(可执行的方法,超时返回的值)函数判断JavaScript是否加载

    (3)强制等待:
    import time
    time.sleep(10)


    (4)处理重定向:
    from selenium import webdriver
    from selenium.webdriver.remote.webdriver import WebElement
    from selenium.common.except import StaleElementReferenceException

    elem = driver.find_element_by_tag_name('html')
    ……执行等待时间
    try:
    elem == driver.find_element_by_tag_name('html')
    except StaleElementReferenceException:
    return

    详解:通过检查javascript程序执行前标签值是否存在判断页面加载是否完整

    执行整个网页的JavaScript:
    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get(url)
    driver.execute_script('windown.scrollTo(0,documengt.body.scrollHeight)')
    driver.execute_script('alert("To Bottom")')

    鼠标操作:
    导入模块:
    from selenium.webdriver import ActionChains

    操作action = ActionChains(driver):

    action.click(on_element=None) ——单击鼠标左键

    action.click_and_hold(on_element=None) ——点击鼠标左键,不松开

    action.context_click(on_element=None) ——点击鼠标右键

    action.double_click(on_element=None) ——双击鼠标左键

    action.drag_and_drop(source, target).perform() ——拖拽到某个元素然后松开

    action.drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

    action.key_down(value, element=None) ——按下某个键盘上的键

    action.key_up(value, element=None) ——松开某个键

    action.move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

    action.move_to_element(to_element) ——鼠标移动到某个元素

    action.move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置

    action.perform() ——执行链中的所有动作

    action.release(on_element=None) ——在某个元素位置松开鼠标左键

    action.send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

    action.send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

    截图:
    driver.get_screenshot_as_file('tmp/pythonscraping.png')
    将主页的屏幕截图保存在本地的tmp 文件夹中(该文件夹必须创建好,以供正确存储之用)。截屏可保存为多种文件格式。

    窗口最大化:
    driver.maximize_window()

    获取元素信息:
    (1)
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.by import By

    driver = webdriver.Chroms()
    driver.get(url)
    content = driver.find.element(By.ID,'zh-top-link-logo')#定位
    #属性:
    herf = content.get_attribute('class')
    #文本:
    text = content.text()
    #id:
    num = content.id
    #位置:
    location = content.localtion
    #标签名:
    lable = content.tag_name
    #大小:
    size = content.size


    (2)
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time

    # 调用环境变量指定的PhantomJS浏览器创建浏览器对象,executable_path:指定PhantomJS位置
    driver = webdriver.PhantomJS(executable_path = r"D:Program Filesphantomjsinphantomjs")

    # get()方法会一直等到页面被完全加载,然后才会继续程序
    driver.get("http://www.baidu.com/")

    # 获取页面名为wrapper的id标签的文本内容
    data = driver.find_element_by_id("wrapper").text

    # 打印获取的文本内容
    print(data)

    # 打印页面标题:百度一下,你就知道
    print(driver.title)

    # 生成当前页面快照并保存
    driver.save_screenshot("baidu.jpg")

    # 在百度搜索输入框中输入“蚂蚁”
    driver.find_element_by_id("kw").send_keys("蚂蚁")

    # 模拟点击“百度一下”按钮
    driver.find_element_by_id("su").click()
    # 等待2秒,让页面加载
    time.sleep(2)

    # 获取搜索后的页面快照
    driver.save_screenshot("蚂蚁.jpg")

    # 打印网页渲染后的源代码
    # print(driver.page_source)

    # 获取当前页面Cookie
    print(driver.get_cookies())

    # Ctrl + a 全选输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "a")

    # Ctrl + x 剪切输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "x")

    # 输入框重新输入内容
    driver.find_element_by_id("kw").send_keys("python")

    # 模拟Enter回车键
    driver.find_element_by_id("su").send_keys(Keys.ENTER)

    # 等待2秒,让页面加载
    time.sleep(2)

    # 清除输入框内容
    driver.find_element_by_id("kw").clear()

    # 获取新的快照
    driver.save_screenshot("python.jpg")

    # 获取当前url
    print(driver.current_url)

    # 关闭当前页面,如果只有一个页面,会关闭浏览器
    driver.close()

    # 关闭浏览器
    driver.quit()

    Frame:(多表单切换处理)
    很多时候定位元素时候总是提示元素定位不到的问题,明明元素就在那里,这个时候就要关注你所定位的元素是否在frame和iframe里面

    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException

    driver = webdriver.Chroms()
    driver.get(url)
    driver.switch_to.find('frame的id值')#切换到frame
    source = driver.find_element_by_css_selector('#值')#建立需要拖拽的对象

    #找不到元素的异常
    try:
    logo = driver.find_element_by_class_name('logo')
    except NoSuchElementException:
    print('no logo')

    #切换到父类frame
    driver.switch_to.parent_frame()
    logo = driver.find_element_by_css_name('logo')

    浏览器前进后退、关闭:
    from selenium import webdriver

    driver.get('https://www.baidu.com')
    driver.get('https://www.taobao.com')
    driver.get('https://www.sogou.com/')
    #后退
    driver.back()
    #前进
    driver.forward()
    #关闭
    driver.close()

    选项卡管理:
    建立新的选项卡:
    driver.execute_script('window.open()')
    切换新的选项卡:
    driver.switch_to_window(driver.window_handles[1])
    driver.get(url)
    切换回第一个选项卡
    driver.switch_to_window(driver.window_handles[0])
    driver.get(url)

    异常:
    from selenium.common.exceptions import TimeoutException,NoSuchElementException

    TimeoutException 超时
    NoSuchElementException 找不到元素


    # Firefox headless模式运行
    options = webdriver.FirefoxOptions()
    options.add_argument('-headless')
    self.driver = webdriver.Firefox(options=options)
    self.driver.implicitly_wait(30)

    # 设置Firefox下载exe格式的文件,不弹出下载窗,直接下载到指定路径
    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.dir', 'd:\')
    profile.set_preference('browser.download.folderList', 2)
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    # 参数 application/octet-stream 表示下载exe文件无需弹窗确认,直接下载
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/octet-stream')

    #Firefox headless模式运行
    options = webdriver.FirefoxOptions()
    options.add_argument('-headless')

    #实例化对象时,将设置的Firefox参数传入
    self.driver = webdriver.Firefox(firefox_profile=profile,options=options)
    self.driver.implicitly_wait(30)
    self.base_url = "https://www.baidu.com/"


  • 相关阅读:
    js实现页面的全屏与退出
    vue父组件访问子组件
    v-contextmenu的使用(右键菜单)
    vue实现tab切换
    vue中子组件向父组件传值
    vue中父组件传数据给子组件
    RNN
    用于超参数随机化搜索的几个分布
    Numpy 函数总结 (不断更新)
    神经网络求导
  • 原文地址:https://www.cnblogs.com/7134g/p/11510493.html
Copyright © 2011-2022 走看看