selenium + PhantomJS 操作

在网站模拟登陆的时候可能会遇到复杂的JS操作,如果用程序去模拟会很复杂,而且可用性很差,所以这个时候就需要用模拟浏览器操作。
selenium提供一系列操作接口可以操作firefox,chrom,phantomjs
PhantomJS是无头浏览器,没有界面所以效率很高

安装

python selenium安装

    pip install selenium

phantomjs安装

    wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
    tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2

selenium的使用

设置请求头和代理

    #设置请求头
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    dcap["phantomjs.page.settings.userAgent"] = (
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
         (KHTML, like Gecko) Chrome/52.0.2743.24 Safari/537.36"
    )
    #设置代理
    service_args = [
        '--proxy=' + proxy,
        '--proxy-type=https',
    ]
    #executable_path 设置PhantomJS_PATH地址
    driver = webdriver.PhantomJS(executable_path=PhantomJS_PATH,
                                 desired_capabilities=dcap,                
                                 service_args=service_args)

设置页面超时

    driver.set_page_load_timeout(60)

请求网址

    driver.get("https://www.baidu.com")

选择页面元素

    #css 选择器
    user_name_ele = driver.find_element_by_css_selector("form.login-form
     input[name='user_login']")
    #根据id选择
    login_ele = driver.find_element_by_id("verify-state")
    #根据tag_name选择
    iframe = driver.find_element_by_tag_name("iframe")

输入内容

    user_name_ele.send_keys(user_name)

元素点击

    login_ele.click()

页面截图

    driver.get_screenshot_as_file("screenshot.png")
    #页面截图后会失去页面焦点,想要找回页面焦点可以点击页面元素

转到frame页面

    driver.switch_to.frame(iframe)

等待页面加载

    #直接浏览器休眠100秒
    driver.implicitly_wait(100)
    #60秒内没有加载到img元素会返回错误
    WebDriverWait(driver, 60).until(lambda brow: 
    brow.find_element_by_css_selector("img"))

页面点击操作

    #获取元素
    verify_container = driver.find_element_by_class_name("verify-container")
    #生成鼠标事件
    action = webdriver.common.action_chains.ActionChains(driver)
    #移动到某个元素
    action.move_to_element(verify_container)
    #偏移位置
    action.move_by_offset(int(x) - 8, int(y) - 68)
    #点击
    action.click()
    #加这个才能表现到页面上
    action.perform()

获取cookie并保存

    cookie = driver.get_cookies()
    cj = LWPCookieJar()
        for s_cookie in cookie:
            cj.set_cookie(cookielib.Cookie(version=0, name=s_cookie['name'], 
                            value=s_cookie['value'], port='80',
                            port_specified=False, domain=s_cookie['domain'],
                            domain_specified=True,
                            domain_initial_dot=False, path=s_cookie['path'],
                            path_specified=True,secure=s_cookie['secure'], rest={},
                            expires=s_cookie['expiry'] 
                            if "expiry" in s_cookie else None, discard=False,
                            comment=None, comment_url=None, rfc2109=False))
    cj.save("cookie")

关闭

    driver.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值