python - Selenium 无法在 Linux 上获取网页内容,但在 Windows 上可以很好地获取特定网站

标签 python linux selenium selenium-webdriver

我正在从 Coinsuper 抓取比特币报价。这是一个 JavaScript 页面。当我第一次使用 Python 3.7SeleniumChromium 在 Windows 上开发代码时,效果很好。

我想在我的服务器上部署此代码以连续获取数据。但是,它在 Linux 下不起作用。

我确信我的代码可以工作,至少在大多数网站上,包括 Apple , Google , Baidu , Xueqiu

  • 操作系统方面,我尝试过Debian 9和Ubuntu 18.04。
  • 对于 webdriver,我尝试过 Chrome 和 Firefox。
  • 对于网络驱动程序参数,我已经尝试过:

    1. 添加 header ,包括fake-useragent

    2. 忽略 SSL 证书

    3. 禁用 GPU

这些没有区别。

我认为这可能是因为Coinsuper有一些反抓取策略。但我也很困惑为什么类似的代码可以在 Windows 上运行但不能在 Linux 上运行。是否有任何差异可能导致这种情况?

代码:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')  # Only included in Linux version
chrome_options.add_argument('--no-sandbox')  # Only included in Linux version
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.coinsuper.com/trade')
print(driver.page_source)
driver.quit()

最佳答案

我就是问这个问题的人。谢谢大家对我的帮助!最后我解决了这个问题。

  • @furas 表明我的代码实际上可以从 Coinsuper 获得响应.

  • @Dalvenjia启发我,这可能是由IP黑名单引起的,这对于云服务器来说最有可能。是的,我正在使用云服务器。

解决方案如下:

  1. 启动Shadowsocks来 self 的家庭 IP 地址的服务器,或使用您拥有的任何代理。

  2. 开始Shadowsocks服务器上的客户端:

  3. 在 Python 脚本中向 ChromeDriver 添加一个参数:

chrome_options.add_argument('--proxy-server=socks5://127.0.0.1:xxxx')

现在我可以绕过IP黑名单获取内容了。

enter image description here

关于python - Selenium 无法在 Linux 上获取网页内容,但在 Windows 上可以很好地获取特定网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257051/

相关文章:

c - 为什么 valgrind 在调用 `pcap_open_offline` 时会报告内存泄漏?

python - 如何在 zillow 中抓取价格/税收历史记录表?

python - 将 bool 值列表转换为字符串

python - 使用正则表达式删除相对行

python - matplotlib 的ight_layout() 中的断言错误

python - PyArg_ParseTupleAndKeywords 在指定对象的地方需要一个空参数?

linux - pgpgin 和 pgpgout -/proc/vmstat 中的 Linux 计数器

linux - 终止进程 '[avconv] <defunct>'

testing - Hudson/Jenkins 仅在连续失败时通知

html - 使用xpath的Selenium-如何使用同级元素文本获取元素文本