我正在尝试使用 Selenium 抓取第三方网站(我尝试使用 Beautiful Soup,但他们的身份验证系统太难理解,所以我放弃并改用 Selenium)。
我正在使用一个 python 脚本,该脚本使用最新的 Selenium 3.12.0 驱动程序和 selenium-server-standalone-3.12.0.jar
。我的 Linux 和 macOS 机器都在运行 jdk 1.8.0_172。
如果我使用 macOS 上的 selenium 服务器在 Linux 或 macOS 上运行脚本,效果很好。如果我使用 Linux 上的 selenium 服务器在 Linux 或 macOS 上运行脚本,它无法加载 jQuery 并出现以下错误:
18:28:02.453 ERROR [DefaultJavaScriptErrorListener.loadScriptError] - Error loading JavaScript from [https://ww6.fltplan.com/js/jquery-1.12.3.min.js].
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
我正在抓取的网站写得非常原始(看起来像 GeoCities 中的东西)所以它很可能在做一些荒谬的事情。哦,这段代码几周前还可以运行,我“卡住”了它,但后来它在 Linux 中停止运行,我不得不重新开始修改它。
这是我的连接代码:
capabilities = {
'browserName': 'htmlunit',
'version': 'firefox',
'platform': 'ANY',
'javascriptEnabled': True,
'acceptInsecureCerts': True,
}
driver = webdriver.Remote(
# "http://192.168.1.46:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNITWITHJS
# "http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNITWITHJS
"http://localhost:4444/wd/hub", capabilities
)
driver.get("https://www.fltplan.com/")
第一个注释掉的远程 url 是在我的 macOS 机器上运行的 Selenium,它可以工作。第二个和第三个是尝试使其在 Linux 上运行,但目前未成功。第二个是几周前才有效的那个。
最佳答案
我想我有一个解决方案。我在 java_home/jre/lib/security
中复制了 java.security 文件,并注释掉了文件中的所有“disabledAlgorithms”行。我用 nohup java -Djava.security.properties==java.security.copy -jar selenium-server-standalone-3.12.0.jar
启动了 selenium 服务器,它现在似乎可以工作了。
我很想听听解释为什么会这样。我认为这意味着他们试图从中下载 jquery 的站点使用了 jdk 1.8 禁用的加密,因为它被认为太弱了。
关于python-3.x - Selenium webdriver.Remote 在 Linux 上出现 SSL 错误,在 macOS 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548495/