2017-07-06 63 views
0

我是新来的Python,我甚至不知道我是否问得很对,但事情是我需要发送一个请求到一个网站登录,这个网站正在给我回复一条消息,告诉我我必须在使用该网站之前启用JavaScript。如果没有Selenium或类似软件,我可以绕过“Javascript is required”吗?

我用硒做了,一切正常,工作正常(更多的东西,不仅仅是登录),但现在我想让它没有Selenium,实际上没有任何浏览器窗口,这甚至有可能吗?我想这是,但是,我需要一些帮助,因为我没有找到办法。

#!/usr/bin/python3 
import requests 

userEmail = "[email protected]" #using real data in the script 
userPass = "xxxxxxxxxxxxx" #using real data in the script 

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0', 
    'Accept': 'application/json, text/javascript, */*; q=0.01', 
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
    'X-Requested-With': 'XMLHttpRequest' 
} 

def main(): 
    r = requests.post('https://www.thedomain.com/en/customer/account/loginPost/', 
    data = {'login[username]':userEmail, "login[password]":userPass}, headers=headers) 
    print(r.text) 

if __name__ == "__main__": main() 

,这是我的消息得到:

<html> 
    <title>You are being redirected...</title> 
    <noscript>Javascript is required. Please enable javascript before you are allowed to see this page.</noscript> 
</html> 

我可以绕过这个无硒?

+1

我会说不。页面可能是动态生成的(例如使用Angular或React),所以如果JS被禁用,您就不可能看到生成的内容。 –

+2

但是,如果您希望在不使用浏览器窗口的情况下执行此操作,请查看phantomjs,您仍然使用硒但它是一个“无头”浏览器,因此不会出现窗口,但它仍然可以运行所需的javascript –

+0

重要的是你得到什么回应?登录逻辑如何工作?通常,在某处登录最终会得到一个cookie或类似的东西(包含会话ID),您将在随后的所有请求中使用它来表明您是刚刚登录的用户。 – Metareven

回答

0

使用带有硒的无头浏览器

无头浏览器在命令行中运行。您需要在网站上运行JavaScript,如果您正在谈论的是没有服务器渲染的SPA,那意味着只有在JavaScript运行后才会看到该网站。

要使用无头浏览器,您必须在您的系统中使用install NodeJS

最为人熟知的模拟浏览器是PhantomJS,但也有others

sudo npm install -g phantomjs 

安装完成后,设置Selenium司机:

driver = webdriver.PhantomJS() 

就是这样,运行时,你不应该看到任何东西,你甚至可以在服务器上运行它。

干杯!

编辑

另一种解决方案是使用pyvirtualdisplay,这是它的名字一样,它创建了一个虚拟显示,达到同样的,但这样做将允许例如,运行在Chrome浏览器服务器。 快速示例取自here

from pyvirtualdisplay import Display 
from selenium import webdriver 

display = Display(visible=0, size=(1366, 768)) 
display.start() 
browser = webdriver.Firefox() 
browser.get('http://www.vionblog.com/') 
browser.save_screenshot('vionblog.png') 
browser.quit() 
display.stop() 
+0

我想避免这种情况,因为如果服务器非常繁忙,例如,加载CSS文件时出现问题,我想这不会起作用......无论如何,我会尝试这种方式,会是什么我已经有,但没有一个适当的窗口:) 感谢您的回答。 – torpedete

+0

不客气。请记住,过早优化是所有邪恶的根源。我在一台装有其他芹菜服务的服务器中使用了一台Selenium + PhantomJS刮刀,在一台中型EC2中使用,它的功能就像一个魅力。所以要确定你的服务器会非常忙碌,如果是的话,还有其他的解决方案,比如专门为刀片服务器使用服务器。 – Willemoes

+0

有一些**实验性的**替代品,比如'pyV8',它是V8(JS引擎)的一个包装器,从服务器获得JS后,可以使用它运行它,但是你会遇到其他问题,比如如何运行多个JS文件等。正如我所说的,最终,你最终会在某处运行JS代码。你也可以尝试转换JS> Python,但它有点不合理,你不能保证它会像JS一样工作。但是我特别想到web,最好的是**无头浏览器**。 – Willemoes

相关问题