【问题标题】:Is it possible to use a bot to open a browser, manually manipulate the page, then continue using a bot on it?是否可以使用机器人打开浏览器,手动操作页面,然后继续使用机器人?
【发布时间】:2017-01-18 06:25:59
【问题描述】:

我正在使用 Ruby、Selenium WebDriver 和 Nokogiri 从网页中检索数据。加载正确的 HTML 后,我会打印某个类的内容。

例如,

require "selenium-webdriver"
require "nokogiri"
browser = Selenium::WebDriver.for :chrome
browser.get "https://jsfiddle.net"
doc = Nokogiri::HTML.parse(browser.page_source)
doc.css('.aiButton').map(&:text).join(',')

到目前为止,我发现最难的部分是正确加载正确的 HTML。例如,我想要的内容可能被某些 javascript 隐藏,或者可能在不同的页面上。

是否可以使用 Selenium 加载页面,然后手动操作页面以显示正确的 HTML,然后然后允许机器人完成并打印它应该完成的内容? p>

【问题讨论】:

  • 简短的回答是肯定的。 Selenium 将在您的 GUI 中打开一个浏览器,并且在您的脚本完成之前它将保持打开状态。

标签: ruby selenium webdriver nokogiri screen-scraping


【解决方案1】:

您可以使用 Selenium 与网页交互 - 填写表单字段、单击按钮等。您甚至可以执行自己的 javascript 代码。

Selenium cheat sheet

编辑:

使用 pry 停止代码执行,以便您可以手动操作网页。

# Code for starting Selenium session and opening the web page
...

# Use pry to stop the code execution.
# Resume the program using command 'exit' in the pry context
require 'pry'; binding.pry

# Code to get results after you manually manipulate the web page
...

【讨论】:

  • 我发现这是最耗时的部分。有没有办法手动完成该部分,然后在我完成后恢复机器人?
  • 我不知道你为什么要这么做。 Selenium 驱动程序与网页的交互总是比您手动操作的速度更快。
  • 这是因为每个用例都会不同,所以我每次都必须编写不同的代码。自己获取 HTML 会更快。
  • 我不知道您是否可以继续使用 Selenium 手动启动的会话。我认为这比修改用于检索数据的脚本更复杂。如果以可重用的方式编写代码,则不会有这样的开销。
  • 当您希望脚本暂停、运行、操作页面,然后继续脚本运行时,您可以在代码中放置断点...但我支持 kallax,我不这样做不知道你为什么要这么做。
【解决方案2】:

你可以很容易地做到这一点。我对 ruby​​ 不熟悉,但我将概述该过程。

1) 启动驱动程序 2)转到您的页面 3)然后要求用户输入(在python 2中,例如: continue = raw_input('type something and hit enter here in console'))

4) 然后做你想做的所有其他事情。

当您执行此脚本时,它会在问题处停止。然后您可以手动操作浏览器,完成后您转到控制台/cmd 窗口并键入“go”并按 Enter。然后它将从您手动离开浏览器的位置继续。

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2011-05-24
    • 2017-10-17
    • 2020-10-11
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多