selenium 2和watir webdriver中怎么在启动浏览器时保留cookie

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium 2和watir webdriver中怎么在启动浏览器时保留cookie相关的知识,希望对你有一定的参考价值。

您好,很高兴能帮助您
那么使用动态密码或验证码的网站我们就无法自动化测试了么?答案是不一定,因为有些网站登陆后会在cookie中写入当前用户的登录态,于是只要登 陆一次该站点,那么下次访问的时候就不需要再登陆了。因此我们需要让浏览器为我们保存cookie以使得我们可以不需要登陆站点就能进行自动化测试。
但是selenium或watir webdriver默认启动的时候是没有加载已存在cookie的。其实这个问题的解决方法非常简单。
Watir::Browser.new(:firefox, :profile => \'default\') # watir webdriver

Selenium::WebDriver.for(:firefox, :profile => \'default\') #selenium 2

在启动浏览器的时候加上default profile就能解决这个问题了。
你的采纳是我前进的动力,
记得好评和采纳,答题不易,互相帮助,
参考技术A java无法做到与浏览器API交互,因为编译发行的浏览器可执行文件不是内核源码,木有丰富的内置API可供调用。
因此,在打开浏览器的时候会指定 URL 到Selenium的远程服务页上去。这个页面通过js建立与远程服务器的HTTP连接通信(如 长连接,websocket,ajax轮询等)。
当远程代码需要获取、操作本地浏览器DOM、JS 等内容时,推送一段指定js源码到浏览器端执行。执行完成后将结果发送至远端服务器上。
以此来实现远端对客户端浏览器页面内容通信。

Selenium 错误消息“selenium.webdriver 没有属性执行脚本”

【中文标题】Selenium 错误消息“selenium.webdriver 没有属性执行脚本”【英文标题】:Selenium error message "selenium.webdriver has no attribute execute script" 【发布时间】:2019-02-04 15:45:44 【问题描述】:

我正在使用 selenium 来抓取无限滚动页面。

我正在尝试使用此代码:

import time
import pandas as np
import numpy as np

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://twitter.com/search?f=tweets&q=csubwaystats%20since%3A2018-05-28%20until%3A2018-08-28'

browser.get(url)
time.sleep(1)

SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = webdriver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    webdriver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = webdriver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

我从多个来源获得此代码,最近的是:

How can I scroll a web page using selenium webdriver in python?

我将它更新为包含“webdriver”而不是“driver”,因为我将 selenium 作为 webdriver 导入。否则它不起作用。

我的问题是,当我运行代码时,我得到:

AttributeError: module 'selenium.webdriver' has no attribute 'execute_script'

我真的不明白这意味着什么以及如何解决它?我无法找到这方面的信息。

我是 python 新手,所以可能遗漏了一些明显的东西,但任何建议都将不胜感激。

【问题讨论】:

请用您使用的确切代码更新问题 就这么做了。谢谢! 【参考方案1】:
AttributeError: module 'selenium.webdriver' has no attribute 'execute_script'

你得到这个错误是因为'execute_script'不是一个类属性,你不能直接使用它。因为它是一个 instance 属性,你应该创建一个类的实例。请查看here 了解更多关于的信息。

现在可以正常工作了,因为“execute_script”作为实例属性运行

last_height = browser.execute_script("return document.body.scrollHeight")

你的最终代码应该是这样的:

import time
import pandas as np
import numpy as np

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://twitter.com/search?f=tweets&q=csubwaystats%20since%3A2018-05-28%20until%3A2018-08-28'

browser.get(url)
time.sleep(1)

SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = browser.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    webdriver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = webdriver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

【讨论】:

"Do not import selenium as webdriver, import webdriver from selenium"...考虑到异常日志OP已经导入webdriverfrom@ 987654326@。 “你需要 webdriver 类”...webdriver 不是一个,而是定义了WebDriver 类的模块。 “selenium 是一个包含 python 类的 python 程序”...没有 cmets :) 对不起,我应该澄清一下。我确实使用了'from selenium import webdriver'(当然没有引号)我也确实创建了一个webdriver的实例,但我使用的是chrome。我的路上也有它。 @Andersson 请原谅我对此的无知,我是一名学生,我正在努力给出答案。不过,我不应该提出我不知道的事情。 @agra94 好吧,很抱歉我没有正确阅读您的问题。很明显,您已经可以使用 Chrome 实现自动化,这是我的错。 @CoreyGoldberg 我已经修复了缩进。【参考方案2】:

webdriver 是模块的名称,而不是您的实例。实际上,您将创建的实例分配给名称 browser 使用以下行:browser = webdriver.Chrome()

所以不要调用webdriver.execute_script()(这会给你一个AttributeError),你必须使用你的实例调用它,像这样:browser.execute_script()

【讨论】:

【参考方案3】:

要使其工作,您必须创建一个 webdriver 实例,例如:

from selenium import webdriver

driver = webdriver.Chrome() # webdriver.Ie(), webdriver.Firefox()...
last_height = driver.execute_script("return document.body.scrollHeight")

您可以从here下载Chromedriver

您还需要add path to Chromedriver to your environment variable PATH 或将下载的文件放入与您的 Python 可执行文件相同的文件夹中...

【讨论】:

啊,那是我的错。我没有包括我做这个的代码。我有 from selenium import webdriver driver = webdriver.Chrome('location of chromedriver') ...然后我继续上面的内容 抱歉,我不确定如何正确格式化 cmets @agra94 ,你不应该只定义driver,而是在下面的行中使用它(注意我使用了driver.execute_script(),而不是webdriver.execute_script()

以上是关于selenium 2和watir webdriver中怎么在启动浏览器时保留cookie的主要内容,如果未能解决你的问题,请参考以下文章

Ruby Watir 表单下拉未找到

LoadError:无法加载此类文件 - selenium / webdriver / phantomjs

selenium-webdriver循环点击百度搜索结果以及获取新页面的handler

ruby 3和rails 6的watir:参数数量错误

从0到1,教你实现基于Ruby的watir-webdriver自动化开发

使用ruby + watir-webdriver + cucumber和parallel_tests gem在多个浏览器中运行测试