在docker中远程调用PhantomJS

简介: 背景:写了一个爬虫程序使用的docker部署,部署后在docker中安装PhantomJS 比较麻烦,于是想到了再另一个docker容器中部署一个PhantomJS ,通过远程调用的方式来使用它1.

背景:写了一个爬虫程序使用的docker部署,部署后在docker中安装PhantomJS 比较麻烦,于是想到了再另一个docker容器中部署一个PhantomJS ,通过远程调用的方式来使用它

1.启动一个PhantomJS docker实例

[root@Ieat1 ~]# docker run -d --name phantomjs  -p 8910:8910 wernight/phantomjs phantomjs --webdriver=8910

2.通过程序远程调用

通过Java 调用:

    WebDriver driver = new RemoteWebDriver(
        new URL("http://127.0.0.1:8910"),
        DesiredCapabilities.phantomjs());

通过python调用,先运行 pip install selenium安装selenium

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

    driver = webdriver.Remote(
        command_executor='http://127.0.0.1:8910',
        desired_capabilities=DesiredCapabilities.PHANTOMJS)

    driver.get('http://example.com')
    driver.find_element_by_css_selector('a[title="hello"]').click()

    driver.quit()

3.完整的代码段:

public class RemotePhantomjsTest {


    public static void main(String[] args) throws InterruptedException {
        DesiredCapabilities dc = new DesiredCapabilities();
        dc.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");

        WebDriver webDriver = null;
        try {
            webDriver = new RemoteWebDriver(new URL("http://127.0.0.1:8910"), dc);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            webDriver.get("https://www.baidu.com/");
            WebElement webElement = webDriver.findElement(By.xpath("/html"));
            String content = webElement.getAttribute("outerHTML");
            System.out.println(content);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            webDriver.close();
        }
    }

}

监控一下docker的日志,发现调用成功

[root@Ieat1 ~]# docker logs -f phantomjs  
[INFO  - 2018-08-12T12:03:20.392Z] Session [b47e2840-9e27-11e8-81d3-1d2649e3289e] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","webSecurityEnabled":true}
[INFO  - 2018-08-12T12:03:20.392Z] Session [b47e2840-9e27-11e8-81d3-1d2649e3289e] - page.customHeaders:  - {}
[INFO  - 2018-08-12T12:03:20.392Z] Session [b47e2840-9e27-11e8-81d3-1d2649e3289e] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.1.1","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"linux-unknown-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"},"phantomjs.page.settings.userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"}
[INFO  - 2018-08-12T12:03:20.392Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: b47e2840-9e27-11e8-81d3-1d2649e3289e

参考:

https://hub.docker.com/r/wernight/phantomjs/

目录
相关文章
|
Docker 容器
docker远程访问
http://0.0.0.0:2375 // 全0表示自身ip 通常docker 用2375提供端口 远程时设置远程的地址 要本地时把设置置空 ...
1316 0
|
安全 Docker 容器
Docker远程TLS管理
首先介绍一个好用的Docker管理软件,Portainer,好用便捷,让你轻松无压力的管理Docker环境。 我们不会只有一个Docker服务,一般都是多个Docker服务,这个时候需要中心化管理多个Docker服务,这在Potainer中即添加新的入口点。
|
安全 网络协议 开发工具
|
网络协议 API 数据格式
[Docker系列·8] Docker远程接口
>https://docs.docker.com/reference/api/docker_remote_api >>tends to be REST >https://docs.docker.com/articles/basics/#bind-docker ###拓扑 ####Parallel Desktop网络配置 共享网络-默认适配器 ![2014_08_23_PD_
2918 0
|
网络协议 API 网络架构
在Mac OSX系统的Docker机上启用Docker远程API功能
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50650214 在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主允许不得转载。
1378 0
|
17天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
158 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
4天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
19 4
|
19天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
62 3

热门文章

最新文章