在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提供端口 远程时设置远程的地址 要本地时把设置置空 ...
1268 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_
2904 0
|
网络协议 API 网络架构
在Mac OSX系统的Docker机上启用Docker远程API功能
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50650214 在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主允许不得转载。
1359 0
|
7天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
38 5
|
2天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
18天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
18天前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
56 0
Docker跨宿主机容器通信-通过网络跨宿主机互联