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) 我试图从这个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
我正在使用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
尝试在 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
我正在尝试使用 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)
现在它在这两种情况下都在本地工作。但是当我部署到云功能时,它仍然失败。
这是响应日志的一部分。
_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
当我不在无头模式下运行 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
我在 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)
谢谢你。
我有两个用于 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) 我正在尝试使用 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) 我使用 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。
puppeteer ×5
node.js ×3
selenium ×3
web-scraping ×2
bots ×1
captcha ×1
capybara ×1
cloudflare ×1
cucumber ×1
docker ×1
headless ×1
javascript ×1
python-3.x ×1
ruby ×1
ubuntu-20.04 ×1