我正在从 Coinsuper 抓取比特币报价。这是一个 JavaScript 页面。当我第一次使用 Python 3.7、Selenium 和 Chromium 在 Windows 上开发代码时,效果很好。
我想在我的服务器上部署此代码以连续获取数据。但是,它在 Linux 下不起作用。
我确信我的代码可以工作,至少在大多数网站上,包括 Apple , Google , Baidu , Xueqiu等
- 操作系统方面,我尝试过Debian 9和Ubuntu 18.04。
- 对于 webdriver,我尝试过 Chrome 和 Firefox。
对于网络驱动程序参数,我已经尝试过:
添加 header ,包括
fake-useragent
忽略 SSL 证书
禁用 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黑名单引起的,这对于云服务器来说最有可能。是的,我正在使用云服务器。
解决方案如下:
启动Shadowsocks来 self 的家庭 IP 地址的服务器,或使用您拥有的任何代理。
开始Shadowsocks服务器上的客户端:
在 Python 脚本中向 ChromeDriver 添加一个参数:
chrome_options.add_argument('--proxy-server=socks5://127.0.0.1:xxxx')
现在我可以绕过IP黑名单获取内容了。
关于python - Selenium 无法在 Linux 上获取网页内容,但在 Windows 上可以很好地获取特定网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257051/