在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提供端口 远程时设置远程的地址 要本地时把设置置空 ...
1399 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_
2924 0
|
网络协议 API 网络架构
在Mac OSX系统的Docker机上启用Docker远程API功能
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50650214 在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主允许不得转载。
1387 0
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
225 93
|
5天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
39 23
|
5天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
102 15
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
299 78