zoukankan      html  css  js  c++  java
  • Python

     

    Selenium Python 官网

    安装 Selenium

    # python 2+
    pip install selenium
    
    # python 3+
    pip3 install selenium

    转载自:莫凡Python 高级爬虫: 让 Selenium 控制你的浏览器帮你爬

    driver

    要操控浏览器, 你就要有浏览器的 driver. Selenium 针对几个主流的浏览器都有 driver. 针对 Linux 和 MacOS.

    Linux 和 MacOS 下载好之后, 将下载好的”geckodriver”   或者  “chromedriver ”文件放在计算机的 “/usr/bin” 或 “/usr/local/bin” 目录. 并赋予执行权限

    sudo cp 你的geckodriver位置 /usr/local/bin
    sudo chmod +x /usr/local/bin/geckodriver

    火狐浏览器插件

    暂时只有火狐上有这个插件. 插件 Katalon Recorder 下载的网址在这

    这个插件能让你记录你使用浏览器的操作. 

     

    安装好火狐上的这个插件后, 打开它.

    找到插件上的 record, 点它.  开始你的各种点击工作, 比如我的一连串操作是 (强化学习教程->About页面->赞助页面->教程->数据处理->网页爬虫)

    虽然这个代码输出只有 Python2 版本的, 不过不影响. 我们直接将这些圈起来的代码复制. 这将会是 python 帮你执行的行为代码.

     

    Python 控制浏览器

    开始写 Python 的代码了. 这里十分简单! 我将 selenium 绑定到 Chrome 上 webdriver.Chrome(). 你可以绑其它的浏览器.

    from selenium import webdriver
    
    driver = webdriver.Chrome()     # 打开 Chrome 浏览器
    
    # 将刚刚复制的帖在这
    driver.get("https://morvanzhou.github.io/")
    driver.find_element_by_xpath(u"//img[@alt='强化学习 (Reinforcement Learning)']").click()
    driver.find_element_by_link_text("About").click()
    driver.find_element_by_link_text(u"赞助").click()
    driver.find_element_by_link_text(u"教程 ▾").click()
    driver.find_element_by_link_text(u"数据处理 ▾").click()
    driver.find_element_by_link_text(u"网页爬虫").click()
    
    # 得到网页 html, 还能截图
    html = driver.page_source       # get html
    driver.get_screenshot_as_file("./img/sreenshot1.png")
    driver.close()

    我们可以让 selenium 不弹出浏览器窗口, 让它”安静”地执行操作. 在创建 driver 之前定义几个参数就能摆脱浏览器的身体了.

    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument("--headless")       # define headless
    
    driver = webdriver.Chrome(chrome_options=chrome_options)
    ...

    Selenium 能做的事还有很多, 比如填 Form 表单, 超控键盘等等.  欢迎点进去他们的 Python 教学官网.

    最后, Selenium 的优点可以很方便的帮你模拟你的操作, 添加其它操作也是非常容易的, 但是也是有缺点的, 不是任何时候 selenium 都很好. 因为要打开浏览器, 加载更多东西, 它的执行速度肯定没有其它模块快. 所以如果你需要速度, 能不用 Selenium, 就不用吧.

    相关教程

    参考:selenium-webdriver系列博客

    selenium-webdriver 处理JS弹出对话框

    参考链接:http://www.cnblogs.com/mengyu/p/6952774.html

    在实际系统中,在完成某些操作时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框。

    1.警告消息框(alert)
      警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。

    2.确认消息框(confirm)

      确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。

    3.提示消息对话(prompt)
      提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。

    selenium 提供switch_to_alert()方法定位到 alert/confirm/prompt对话框。使用 text/accept/dismiss/send_keys 进行操作,这里注意的是send_keys只能对prompt进行操作。

      • switch_to_alert()   #定位弹出对话
      • text()                   #获取对话框文本值
      • accept()                   #相当于点击"确认"
      • dismiss()                  #相当于点击"取消"
      • send_keys()              # 输入值,这个alert和confirm没有输入对话框,所以这里就不能用了,所以这里只能使用在prompt这里。
        driver = webdriver.Chrome(chrome_options=chrome_options)
    
        driver.get(node_url)
    
        try:
            alret = driver.switch_to_alert() # 定位弹出对话
            while alret:
                time.sleep(1)
                alret.dismiss() # 点击"取消"
                alret = driver.switch_to_alert()
        except Exception as e:
            traceback.print_exc()
            # print("-------------无广告!!!---------")
            pass

    selenium-webdriver 元素定位

    参考链接:https://www.cnblogs.com/mengyu/p/6876294.html

    selenium 提供了8中元素定位的方法(大家要学习元素的定位,首先可以学习下前端的基础知识,这样有利于我们学习自动化测试,大家可以看一下:http://www.runoob.com/

    • find_element_by_id   
    • find_element_by_name
    • find_element_by_xpath
    • find_element_by_link_text
    • find_element_by_partial_link_text
    • find_element_by_tag_name
    • find_element_by_class_name
    • find_element_by_css_selector

    Selenium 获取文本信息方法+select(定位)

    1.通过先定位到具体的元素然后通过text方法获取文本信息,如获取控件名称等

    driver.find_element_by_xpath("//div[/h1").text

    2.直接通过定位到的元素的属性直接获取属性名称,如输入框提示信息等

    driver.find_element_by_id("XXX").get_attribute(YYY)

    driver = webdriver.Chrome()
    
    #最大化窗口
    driver.maximize_window()
    
    # 等待一定时间,让js脚本加载完毕
    driver.implicitly_wait(10)
    
    driver.get("https://v.qq.com/")
    
    driver.find_element_by_xpath("//a[@id='mod_head_notice_trigger']/img").click()
    
    driver.implicitly_wait(100)
    
    
    # # driver.find_element_by_class_name(u"btn_qq _login_type_item").click() #错误原因:类名只能单个
    # # driver.find_element_by_link_text(u"QQ登录").click()
    driver.find_element_by_css_selector(u"a[class='btn_qq _login_type_item']").click()
    
    # 等待一定时间,让js脚本加载完毕
    driver.implicitly_wait(30)
    
    print(driver.page_source.encode('utf-8').decode())
    
    # driver.find_element_by_css_selector(u"a[id='switcher_plogin']").click()
    # a = driver.find_element_by_id("switcher_plogin")
    # print(a.text)
    print("123123")
    
    # driver.find_element_by_id("switcher_plogin").click()
    
    #网页截图
    driver.save_screenshot('picture1.png')
    #打印网页源代码
    print(driver.page_source.encode('utf-8').decode())
  • 相关阅读:
    几个数之和----数组刷题
    单调栈刷题
    腾讯金融科技凉经
    mysql刷题
    链表类题目常用方法
    阿里云一面凉经
    腾讯TEG一面凉经
    腾讯软件开发-后台开发实习生-一面凉经
    剑指 Offer 19. 正则表达式匹配
    剑指 Offer 20. 表示数值的字符串
  • 原文地址:https://www.cnblogs.com/tanrong/p/10034404.html
Copyright © 2011-2022 走看看