带代理的 Selenium 返回空网站

问题描述 投票:0回答:2

我无法通过代理从使用 selenium 的网站获取页面源 HTML。这是我的代码

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import codecs
import time

import shutil

proxy_username = 'myProxyUser'
proxy_password = 'myProxyPW'
port = '1080'
hostname = 'myProxyIP'

PROXY = proxy_username+":"+proxy_password+"@"+hostname+":"+port

options = Options()
options.add_argument("--headless")
options.add_argument("--kiosk")
options.add_argument('--proxy-server=%s' %PROXY)

driver = webdriver.Chrome(r'C:\Users\kingOtto\Downloads\chromedriver\chromedriver.exe', options=options)

driver.get("https://www.whatismyip.com")
time.sleep(10)
html = driver.page_source
f = codecs.open('dummy.html', "w", "utf-8")
f.write(html)

driver.close()

这会导致 HTML 非常不完整,仅显示 head 和 body 的外括号:

html
Out[3]: '<html><head></head><body></body></html>'

此外,写入磁盘的

dummy.html
文件不会显示上面行中显示的任何其他内容。

我迷路了,这是我尝试过的

  1. 当我在没有
    options.add_argument('--proxy-server=%s' %PROXY)
    线的情况下运行它时,它确实有效。所以我确信它是代理。但代理连接本身似乎没问题(我没有收到任何代理连接错误 - 而且我确实从网站获取了外部框架,对吗?所以驱动程序请求通过并返回给我)
  2. 不同的 URL:不仅 Whatismyip.com 失败,任何其他页面也失败 - 尝试了不同的新闻媒体,例如 CNN 甚至谷歌 - 几乎没有任何网站返回,除了头部和身体支架。这不可能是任何 javascript/iframe 问题,对吗?
  3. 不同的等待时间(本文没有帮助:让 Selenium 等待 10 秒),最多 60 秒 - 而且我的连接速度非常快,<1 second should be enough (in browser)

我的连接有什么问题吗?

python selenium proxy
2个回答
0
投票

我相信这是因为您使用的是经过身份验证的代理。 在他们的文档(https://www.browserstack.com/guide/set-proxy-in-selenium)中,它说: “将经过身份验证的代理与 Selenium 集成的最佳方法是使用 PhantomJS 作为无头浏览器而不是 Chrome WebDriver。”

使用未经身份验证的代理的工作方式如下

ChromeOptions options;
WebDriver driver;
System.setProperty("webdriver.chrome.driver", "path to chromedriver.exe");

options = new ChromeOptions();
options.addArguments("--proxy-server=ip:port");
driver = new ChromeDriver(options);

driver.get("https://www.whatsmyip.org/");
System.out.println(driver.findElement(By.xpath("//*[@id=\"ip\"]")).getText());

这会打印通过选项设置的IP。


-1
投票

driver.page_source 并不总是通过 selenium 返回您期望的内容。它可能不是完整的 dom。这在 selenium 文档和各种 SO 答案中都有记录,例如: https://stackoverflow.com/a/45247539/1387701

Selenium 尽最大努力在获取页面源时提供页面源。只有高度动态的页面,这通常会限制其返回。

© www.soinside.com 2019 - 2024. All rights reserved.