Chrome Headless简介

在之前的文章中,我向您介绍了两种使用Java进行Web抓取的工具。 第一篇文章中的HtmlUnit和文章中有关处理Javascript繁重网站的PhantomJS

这次,我们将介绍Chrome的一项新功能,即无头模式。 有传言称,谷歌使用特殊版本的Chrome来满足其抓取需求。 我不知道这是否成立,但是几个月前Google推出了Chrome 59的无头模式。

PhantomJS是该领域的领导者,它一直(并且仍然)大量用于浏览器自动化和测试。 听到有关Headless Chrome的消息后,PhantomJS维护者说他辞去维护者的职务,因为我引述“ Google Chrome比PhantomJS更快,更稳定[...]”
在浏览器自动化和处理Java繁重的网站方面,Chrome无头之徒似乎正成为一种选择。

HtmlUnit,PhantomJS和其他无头浏览器是非常有用的工具,问题在于它们不如Chrome稳定,有时您会遇到Chrome不会发生的Javascript错误。

先决条件

  • 谷歌浏览器> 59
  • Chromedriver
  • 在您的pom.xml中添加Selenium的最新版本:
<dependency>
    <groupId> org.seleniumhq.selenium </groupId>
    <artifactId> selenium-java </artifactId>
    <version> 3.8.1 </version>
</dependency>

如果您尚未安装Google Chrome浏览器,则可以在此处下载
要安装Chromedriver,您可以在MacOS上使用brew:

brew install chromedriver

或使用下面的链接下载。
有很多版本,建议您使用最新版本的Chrome和chromedriver。

让我们登录黑客新闻

在这一部分中,我们将登录到Hacker News,并在登录后获取屏幕截图。我们不需要Chrome无头即可完成此任务,但是本文的目的只是向您展示如何使用Selenium运行无头Chrome 。

我们要做的第一件事是创建一个WebDriver对象,并设置chromedriver路径和一些参数:

// Init chromedriver
String chromeDriverPath = "/Path/To/Chromedriver" ;
System . setProperty ( "webdriver.chrome.driver" , chromeDriverPath );
ChromeOptions options = new ChromeOptions ();
options . addArguments ( "--headless" , "--disable-gpu" , "--window-size=1920,1200" , "--ignore-certificate-errors" );
WebDriver driver = new ChromeDriver ( options );



 option is needed on Windows systems, according to the [documentation](https://developers.google.com/web/updates/2017/04/headless-chrome)
Chromedriver should automatically find the Google Chrome executable path, if you have a special installation, or if you want to use a different version of Chrome, you can do it with :



```java
options.setBinary("/Path/to/specific/version/of/Google Chrome");

如果您想了解更多有关不同选项的信息,请参阅Chromedriver文档

下一步是对Hacker News登录表单执行GET请求,选择用户名和密码字段,并在其中填写我们的凭据,然后单击登录按钮。 然后,我们必须检查凭据错误,如果登录,我们可以截屏。

我们已经在上一篇文章中做到了,这是完整的代码:

public class ChromeHeadlessTest {
    private static String userName = "" ;
    private static String password = "" ;

    public static void main ( String [] args ) throws IOException {
       String chromeDriverPath = "/your/chromedriver/path" ;
       System . setProperty ( "webdriver.chrome.driver" , chromeDriverPath );
       ChromeOptions options = new ChromeOptions ();
       options . addArguments ( "--headless" , "--disable-gpu" , "--window-size=1920,1200" , "--ignore-certificate-errors" , "--silent" );
       WebDriver driver = new ChromeDriver ( options );

      // Get the login page
      driver . get ( "https://news.ycombinator.com/login?goto=news" );

      // Search for username / password input and fill the inputs
      driver . findElement ( By . xpath ( "//input[@name='acct']" )). sendKeys ( userName );
      driver . findElement ( By . xpath ( "//input[@type='password']" )). sendKeys ( password );

      // Locate the login button and click on it
      driver . findElement ( By . xpath ( "//input[@value='login']" )). click ();

      if ( driver . getCurrentUrl (). equals ( "https://news.ycombinator.com/login" )){
        System . out . println ( "Incorrect credentials" );
        driver . quit ();
        System . exit ( 1 );
      } else {
        System . out . println ( "Successfuly logged in" );
      }

        // Take a screenshot of the current page
        File screenshot = (( TakesScreenshot ) driver ). getScreenshotAs ( OutputType . FILE );
        FileUtils . copyFile ( screenshot , new File ( "screenshot.png" ));

        // Logout
        driver . findElement ( By . id ( "logout" )). click ();
    driver . quit ();
   }
}

在通过身份验证时,您现在应该拥有Hacker News主页的漂亮屏幕截图。 如您所见,Chrome无头确实非常易于使用,它与PhantomJS并没有什么不同,因为我们使用Selenium来运行它。

如果您喜欢此消息,请立即订阅我们的新闻通讯!

如果您喜欢网页抓取并厌倦了代理,JS渲染和验证码的处理,则可以查看我们新的网页抓取API ,其中有前1000个API调用。

和往常一样,该代码可在此Github存储库中找到

From: https://dev.to/scrapingbee/introduction-to-chrome-headless-469b

Chrome-headless是Google针对Chrome浏览器59版新增加的一种模式,可以在不打开UI界面的情况下使用Chrome浏览器,并保持与Chrome完全一致的运行效果。它使用方法与Selenium类似。 要使用Chrome-headless,首先需要安装ChromeDriver。可以通过以下步骤来安装ChromeDriver: 1. 下载ChromeDriver:使用wget命令下载ChromeDriver,例如:`wget https://chromedriver.storage.googleapis.com/2.40/chromedriver_linux64.zip` 2. 解压ChromeDriver:使用tar命令解压下载的ChromeDriver文件,例如:`tar xvf chromedriver_linux64.zip` 3. 设置权限:使用chmod命令给解压后的ChromeDriver设置可执行权限,例如:`chmod 755 chromedriver` 配置代码如下所示: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable‐gpu') # 设置Chrome浏览器文件路径 path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' chrome_options.binary_location = path # 创建Chrome-headless浏览器实例 browser = webdriver.Chrome(chrome_options=chrome_options) ``` 通过以上配置代码,你就可以使用Chrome-headless模式进行你需要的操作了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Chrome-headless 使用](https://blog.youkuaiyun.com/grey_mouse/article/details/128243165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Chromeheadless安装与使用](https://blog.youkuaiyun.com/aWDac/article/details/80865754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值