【问题标题】:Selenium, turning a headless chrome driver into a regular one a user can interact with?Selenium,将无头 chrome 驱动程序变成用户可以与之交互的常规驱动程序?
【发布时间】:2017-11-19 07:46:57
【问题描述】:

我的目标是在一个定期自行刷新的页面上运行大约两打无头 chrome 驱动程序。一旦驱动程序检测到页面源中出现的某个关键字,该关键字会为每个会话随机事件,我希望无头驱动程序能够与用户进行交互。

将无头 chrome 驱动程序变成用户可以看到并与之交互的常规驱动程序是否可行?我想到的另一个可能可行的想法是将无头 chrome 驱动程序的会话和 cookie “转移”到常规 chrome 驱动程序中,但同样,我不确定这是否可行。

我想在第一部分使用无头驱动程序,因为它们不会弄乱屏幕而且速度很快。

【问题讨论】:

  • 这听起来像是一个奇怪的用例,可能不是您真正想要的。通过运行这些无头 Chrome 实例,您实际上想达到什么目的?可能有更好的方法来做到这一点。
  • 每个实例都是为了监控一个页面,一旦它检测到变化(每个实例随机发生),用户应该能够与之交互。 ;;;把它想象成彩票,用户拥有的实例越多,他们在页面中获得随机变化的机会就越大。我使用纯 chrome 驱动程序对此进行了编码,但速度有点慢,而且我的计算机在开始崩溃之前只能处理大约 30 个实例。
  • 所以它在等待某种 Javascript 事件?
  • 我不确定它是否是 Javascript,但基本上,浏览器正在监视的页面是一个队列页面。页面会自行刷新,最终浏览器会在获得 HMAC cookie 后通过队列。对于每个实例,何时以及是否获取 HMAC cookie 是随机的,所以我想通过增加实例的数量来最大化机会。这个想法适用于常规的 chrome 驱动程序,但我想要一些更干净、对我的电脑压力更小的东西。
  • 它是否必须刷新或者它可以发送另一个请求?如果您可以重复请求,那么您可以使用非常基本的东西,例如 Curl 或 Guzzle 来获取页面。否则你会被一些可以执行 Javascript 的东西卡住,这实际上会限制你使用无头 Chrome 或 PhantomJS 之类的东西。

标签: python google-chrome selenium driver


【解决方案1】:

好的,我想出了一个很酷的解决方法。希望这可以帮助任何有同样问题的人! :)

user_agent = # user agent 
chrome_path= # path to chrome driver

# headless driver
chrome_options=Options()
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("headless")
chrome_options.add_argument('user-agent={'+user_agent+'}')
driver1=webdriver.Chrome(executable_path=chrome_path, chrome_options=chrome_options)

# let headless driver do its thing..., like log in.. etc

# switch to interactive browser when ready
profile_path=str(driver1.capabilities["chrome"]["userDataDir"])
chrome_options=Options()
chrome_options.add_argument("user-data-dir="+profile_path)
chrome_options.add_argument('user-agent={'+user_agent+'}')
chrome_options.add_argument("disable-infobars")
driver=webdriver.Chrome(executable_path=chrome_path, chrome_options=chrome_options)
driver.get(url)
for cookie in [i for i in driver1.get_cookies() if i not in driver.get_cookies()]:
    driver.add_cookie(cookie)
driver.refresh() # should be what you expect :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2016-06-30
    • 2023-02-10
    相关资源
    最近更新 更多