【问题标题】:How to use ruby to scrape a react website from a remote linux server?如何使用 ruby​​ 从远程 linux 服务器上抓取 react 网站?
【发布时间】:2019-12-15 10:19:58
【问题描述】:

我想在远程 linux 服务器上使用 ruby​​ watir gem 抓取一个反应网站,但不断收到以下错误:

/var/lib/gems/2.3.0/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/firefox/binary.rb:134:in path': can't modify frozen String (RuntimeError) from /var/lib/gems/2.3.0/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/service.rb:45:in firefox'

这是我的代码:

require 'watir'
browser = Watir::Browser.new :firefox, headless: true
browser.goto("https://www.pinterest.com")

有一个类似的问题here,但链接要么返回 404,要么已存档并且代码已弃用。

我需要登录,然后打开一个新页面并在该页面上按按钮以下载某个日期范围的报告文件。

【问题讨论】:

    标签: ruby ubuntu selenium-webdriver watir


    【解决方案1】:

    如果 Firefox 未安装,或者在您的路径上无法访问,您将收到该错误。如果您已经拥有它,请重新安装。

    来源:selenium/webdriver/firefox/binary.rb:134:in `path': can't modify frozen String (FrozenError)

    因此,您可能想使用 Firecast,重新安装可能会有所帮助。如果您有不同的浏览器,您可以使用 Chrome 进行测试。

    还有一些值得关注的东西:

    1. 您可能还需要安装正确的 Web 驱动程序。你也可以使用https://github.com/titusfortner/webdrivers

    2. 我遇到了与您发布的相同的错误,然后我运行 gem install webdrivers 并在代码中使用它,我也切换到了 chrome:

    require 'watir'
    require 'webdrivers'
    browser = Watir::Browser.new :chrome, headless: true
    browser.goto("https://www.pinterest.com")
    

    最后,没有 webdrivers 你会得到类似的东西

    C:/tools/ruby26/lib/ruby/gems/2.6.0/gems/selenium-webdriver-3.142.3/lib/selenium/webdriver/common/service.rb:136:in `binary_path': 无法找到chromedriver。请从 (Selenium::WebDriver::Error::WebDriverError) 下载服务器 https://chromedriver.storage.googleapis.com/index.html 并将其放在 PATH 的某个位置。 更多信息请访问https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver

    如果一切设置正确,您可能会得到类似的东西(很可能与 Chrome 相关):

    DevTools 监听 ws://127.0.0.1:57725/devtools/browser/34a42518-c3d9-4e14-af8e-9a137b11625b [0808/012434.304:INFO:CONSOLE(0)] “Content-Security-Policy 指令‘prefetch-src’是在当前禁用的标志后面实现的。 ",来源:https://www.pinterest.com/(0) [0808/012437.286:INFO:CONSOLE(240)] “没有可用的已登录 Google 帐户 - 请访问 accounts.google.com 以确保至少有一个帐户已登录,否则此 API 将不会返回任何数据。”,来源:https://www.gstatic.com//mss/boq-identity//js/k=boq-identity.IdentityYoloWebModuleset.en_US.fUFh6X86RzU.es5.O/am=Aw/d=1/rs=AOaEmlH5BdY58S_qoulxSYv6tYMpThlVYw/m=yolo_frame_library (240)

    【讨论】:

    • 这在我无法登录 Google 或安装浏览器的远程服务器上如何工作?
    • 嗯,没有这个 gem,可能使用 curl 或使用 http 客户端来发出你需要的 get 请求。
    • 例如curl -d 'username=myname&password=sEcReTwOrD123&csrf=123456' example.com/login,这基本上是对网站登录的发布请求。 (见这里:tech.saigonist.com/b/code/…
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多