标签: google-chrome-headless

如何使用无头铬与水豚和硒

Chrome版本:59.0.3071.104

使用Cucumber,Capybara,Selenium实现无头Chrome的自动化测试.

功能/支持/ env.rb

require 'rubygems'
require 'capybara/cucumber'

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome, args: ['headless'])
end

Capybara.default_driver = :selenium_chrome
Run Code Online (Sandbox Code Playgroud)

在进行黄瓜测试时,它说:

警告Selenium [DEPRECATION]:不推荐使用args或:开关.请改用Selenium :: WebDriver :: Chrome :: Options#add_argument.

使用Headless Chrome的水豚和硒的正确方法是什么?谢谢.

编辑1:我尝试使用Ruby-Binding,Capybara工作示例进行以下操作.但它也会产生错误.

require 'rubygems'
require 'capybara/cucumber'
require 'selenium-webdriver'

Capybara.register_driver :selenium_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless')
  driver = Selenium::WebDriver.for :chrome, options: options
  Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    desired_capabilities: driver
  )
end

Capybara.default_driver = :selenium_chrome
Run Code Online (Sandbox Code Playgroud)

错误:

> undefined method `each' for
> #<Selenium::WebDriver::Remote::Capabilities:0xd13baac> (NoMethodError) …
Run Code Online (Sandbox Code Playgroud)

ruby selenium cucumber capybara google-chrome-headless

9
推荐指数
2
解决办法
5506
查看次数

使用Puppeteer检索JavaScript呈现的HTML

我试图从这个NCBI.gov页面中删除 html .我需要包含#see-all URL片段,这样我才能保证获得搜索页,而不是从错误的基因页面https://www.ncbi.nlm.nih.gov/gene/119016中检索HTML .

URL片段不会传递到服务器,而是由页面客户端的javascript使用(在本例中)创建完全不同的HTML,这是您在浏览器中转到页面时获得的"查看"页面源",这是我想要检索的HTML.R readLines()忽略后跟#的url标记

我第一次尝试使用phantomJS,但它只是回到这里描述的错误的ReferenceError:找不到变量:地图,似乎从phantomJS不支持该NCBI使用某些功能,从而消除了解决这一路线造成的.

我使用以下使用node.js评估的Javascript在Puppeteer上取得了更多成功:

const puppeteer = require('puppeteer');
(async() => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(
    'https://www.ncbi.nlm.nih.gov/gene/?term=AGAP8#see-all');
  var HTML = await page.content()
  const fs = require('fs');
  var ws = fs.createWriteStream(
    'TempInterfaceWithChrome.js'
  );
  ws.write(HTML);
  ws.end();
  var ws2 = fs.createWriteStream(
    'finishedFlag'
  );
  ws2.end();
  browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

然而,这返回了似乎是预渲染的html.我如何(以编程方式)获取我在浏览器中获得的最终html?

javascript node.js web-scraping google-chrome-headless puppeteer

9
推荐指数
2
解决办法
5794
查看次数

限制镀铬无头CPU和内存使用

我正在使用selenium使用以下命令运行chrome headless:

system "LC_ALL=C google-chrome --headless --enable-logging --hide-scrollbars --remote-debugging-port=#{debug_port} --remote-debugging-address=0.0.0.0 --disable-gpu --no-sandbox --ignore-certificate-errors &"
Run Code Online (Sandbox Code Playgroud)

然而,看起来Chrome无头消耗了太多的内存和CPU,任何人都知道如何限制chrome无头的CPU /内存使用量?或者,如果有一些解决方法.

提前致谢.

selenium google-chrome headless headless-browser google-chrome-headless

9
推荐指数
1
解决办法
8395
查看次数

无头 Chrome 终止

尝试在 mac 和 linux 上运行 Headless Chrome 时,失败并显示以下错误

Chrome --headless --disable-gpu https://www.yahoo.com
[0505/072239.922334:ERROR:browser_process_sub_thread.cc(217)] Waited 5 ms for network service
Run Code Online (Sandbox Code Playgroud)

我正在测试版本 Google Chrome 74.0.3729.131

google-chrome google-chrome-headless

9
推荐指数
1
解决办法
7093
查看次数

在云功能上使用 puppeteer 拒绝网站访问

我正在尝试使用 puppeteer来逃避这个网址https://www.myntra.com/laptop-bag/chumbak/chumbak-unisex-brown-geo-bird--printed-laptop-bag/6795882/buy。它在我使用时工作{ headless: false },但在无头模式下失败。

然后我使用这个比较了两种情况下的响应。

const resp = await page.goto(url);
console.log(resp);
Run Code Online (Sandbox Code Playgroud)

然后我发现我们需要在使用无头模式时添加 userAgent。所以我添加了这个。

await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
Run Code Online (Sandbox Code Playgroud)

现在它在这两种情况下都在本地工作。但是当我部署到云功能时,它仍然失败。

这是使用 puppeteer 截取的屏幕截图。 在此处输入图片说明

这是响应日志的一部分。

_headers: 
   { status: '403',
     server: 'AkamaiGHost',
     'mime-version': '1.0',
     'content-type': 'text/html',
     'content-length': '395',
     expires: 'Thu, 09 Jul 2020 12:16:30 GMT',
     date: 'Thu, 09 Jul 2020 12:16:30 GMT',
     'set-cookie': 'AKA_A2=A; expires=Thu, 09-Jul-2020 13:16:30 GMT........
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

谢谢。

更新:

我使用了 puppeteer 隐形插件和 IP 轮换。这是代码

const puppeteer …
Run Code Online (Sandbox Code Playgroud)

node.js web-scraping google-cloud-functions google-chrome-headless puppeteer

9
推荐指数
1
解决办法
2056
查看次数

元素在 Selenium Chrome 无头模式下不可交互

当我不在无头模式下运行 chrome 时,我的代码工作得很好,但在无头模式下我得到“元素不可交互”。

我在 email_box.send_keys('') 处收到错误

我已经设置了窗口大小,但它仍然不起作用

代码:

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time

options = Options()
options.add_argument('headless')
options.add_argument('window-size=1366x768')

with Chrome(options=options) as driver:
    driver.get('https://accounts.google.com/login')

    WebDriverWait(driver, 20).until(lambda d: d.find_element(By.TAG_NAME, 'input'))

    time.sleep(2)
    email_box = driver.find_element(By.TAG_NAME, 'input')
    time.sleep(2)
    email_box.send_keys('example@gmail.com')
Run Code Online (Sandbox Code Playgroud)

selenium python-3.x selenium-chromedriver selenium-webdriver google-chrome-headless

9
推荐指数
2
解决办法
9603
查看次数

使用 puppeteer 从 docker 容器访问无头 chrome 实例时拒绝本地主机连接(在本地运行)

我在 docker 容器中运行无头 chrome 并通过 puppeteer 访问它,方法是使用 browerWSEndpoint 在本地运行它。这部分工作正常。建立连接后,我尝试使用该实例转到失败的 localhost:port 并收到以下错误:

Error: net::ERR_CONNECTION_REFUSED at http://localhost:port/
at navigate (path_to/node_app/puppet/node_modules/puppeteer/lib/Page.js:521:37)
at anonymous
at process._tickCallback (internal/process/next_tick.js:188:7)
Run Code Online (Sandbox Code Playgroud)

木偶版:^1.2

平台/操作系统版本:我的 puppeteer 在我的本地机器上运行,它是 MacOS 10.13.4,docker 容器是 linux。

Node.js 版本:v8.11.2

我使用https://github.com/skalfyfan/dockerized-puppeteer在我的容器中设置无头 chrome。(注意:没有使用 app 文件夹,只使用了 chrome)使用 puppeteer 连接到这个 chrome 实例。尝试使用以下方法打开本地主机: await page.goto(" http://localhost:port ", {waitUntil: 'networkidle0'});

预期:建立连接并停止 docker 容器。

实际的:

Error: net::ERR_CONNECTION_REFUSED at http://localhost:port/
at navigate (/node_app/puppet/node_modules/puppeteer/lib/Page.js:521:37)
at 
at process._tickCallback (internal/process/next_tick.js:188:7)
Run Code Online (Sandbox Code Playgroud)

谢谢你。

docker google-chrome-headless puppeteer

8
推荐指数
1
解决办法
5888
查看次数

Puppeteer - 如何使用本地 IP 地址连接 WSEndpoint?

我有两个用于 puppeteer 自动化的 Node.js 脚本。

1) 启动器.js

此 Puppeteer 脚本启动 Chrome 浏览器并断开与 chrome 的连接,以便可以使用 WSEndpoint 进行连接。

const puppeteer = require('puppeteer');

module.exports = async () => {
    try {
        const options = {
            headless: false,
            devtools: false,
            ignoreHTTPSErrors: true,
            args: [
                `--no-sandbox`,
                `--disable-setuid-sandbox`,
                `--ignore-certificate-errors`
            ]
        };
        const browser = await puppeteer.launch(options);
        let pagesCount = await browser.pages();
        const browserWSEndpoint = await browser.wsEndpoint();
        // console  WSEndPoint say : "ws://127.0.0.1:42207/devtools/browser/dbb2525b-ce44-43c2-a335-ff15d0306f36"
        console.log("browserWSEndpoint----- :> ", browserWSEndpoint);
        await browser.disconnect();
        return browserWSEndpoint;
    } catch (err) {
        console.error(err);
        process.exit(1); …
Run Code Online (Sandbox Code Playgroud)

google-chrome node.js google-chrome-headless puppeteer

8
推荐指数
1
解决办法
8750
查看次数

使用 puppeteer 绕过 Cloudflare

我正在尝试使用 puppeteer 抓取某个网站的一些初创公司数据,当我尝试导航到下一页时,cloudflare 等待屏幕出现并中断抓取。我尝试更改IP,但还是一样。有没有办法用 puppeteer 绕过它。

(async () => {

  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: null,
  });

  const page = await browser.newPage();

  page.setDefaultNavigationTimeout(0);

  let links = [];

  // initial page

  await page.goto(`https://www.startupranking.com/top/india`, {
    waitUntil: "networkidle0",
  });

  // looping through the url to different pages

  for (let i = 2; i <= 7; i++) {
    if (i === 3) {
      console.log("waiting");

      await page.waitFor(20000);

      console.log("waited");
    }

    const onPageLinks = await page.$$eval("tr .name a", (arr) =>
      arr.map((cur) => cur.href)
    ); …
Run Code Online (Sandbox Code Playgroud)

captcha bots cloudflare google-chrome-headless puppeteer

8
推荐指数
0
解决办法
2万
查看次数

Headless Chrome 有时会出现 command_buffer_proxy_impl.cc(128) 错误

我使用 Google Chrome 来生成网页的 PDF。我注意到 Chrome 偶尔会出错。我开始使用它并从命令行开始,即使当我使用最少的标志执行 Chrome 时,它​​有时也会出错。这是我运行的命令:

google-chrome --headless --no-sandbox
Run Code Online (Sandbox Code Playgroud)

这就是我得到的错误。但只是有时。大多数情况下,只会触发两个警告,Chrome 会按预期加载。

[0930/042541.982039:WARNING:bluez_dbus_manager.cc(247)] Floss manager not present, cannot set Floss enable/disable.
[0930/042542.096418:WARNING:sandbox_linux.cc(380)] InitializeSandbox() called with multiple threads in process gpu-process.
[0930/042542.120932:ERROR:command_buffer_proxy_impl.cc(128)] ContextResult::kTransientFailure: Failed to send GpuControl.CreateCommandBuffer.
Run Code Online (Sandbox Code Playgroud)

我一直试图弄清楚这个错误,但我想到的最好的结果是它与某种内存问题有关。让我感到困惑的是,大多数时候,它工作得很好。

我已经浏览了标志列表并尝试关闭大部分不需要的功能,但即使如此,有时也会出现错误。有人遇到过类似的问题吗?

我正在运行 Ubuntu 20.04.05 LTS 和 Google Chrome 106.0.5249.61。

google-chrome google-chrome-headless ubuntu-20.04

8
推荐指数
1
解决办法
1万
查看次数