Selenium上的Javascript在Windows和Amazon Linux上有不同的行为
我正试图编写一个脚本(在Python上使用Selenium)来自动化我对大学图书馆的预订。脚本运行得很好,但由于预订期间的流量很大,页面加载时间很长 为了加快进程,我尝试在Selenium上通过javascript实现HTTP请求(下面的代码)。在我的windows上,它运行得很好,但是当我将更新后的脚本放在我的AmazonEC2(AmazonLinux)实例上时,它的行为有所不同。它们都在Python 3.9.4的最后一个稳定版本(90.0.4430.24)上运行ChromeDriver Headless 取回请求成功之前,它没有返回Selenium上的Javascript在Windows和Amazon Linux上有不同的行为,javascript,python,selenium,selenium-webdriver,selenium-chromedriver,Javascript,Python,Selenium,Selenium Webdriver,Selenium Chromedriver,我正试图编写一个脚本(在Python上使用Selenium)来自动化我对大学图书馆的预订。脚本运行得很好,但由于预订期间的流量很大,页面加载时间很长 为了加快进程,我尝试在Selenium上通过javascript实现HTTP请求(下面的代码)。在我的windows上,它运行得很好,但是当我将更新后的脚本放在我的AmazonEC2(AmazonLinux)实例上时,它的行为有所不同。它们都在Python 3.9.4的最后一个稳定版本(90.0.4430.24)上运行ChromeDriver He
'a'
,而是一直返回None
,这意味着sessionID
从未存在过,并且无法返回我正在寻找的正确的sessionID
代码:
我曾尝试使用GeckoDriver代替Chrome,但在Linux和Windows上都出现了同样的问题。我知道代码中的javascript部分可能不是最好的,因为我不擅长这种语言。另外,处理
请求
不是一个选项,因为我的大学使用SAML和OAuth。只是一个提示。在捕捉到错误的地方,可以方便地将其返回到控制台,而不是“error”。对于错误,您也可以使用console.error()。它们可能正在阻止数据中心通信(cloudflare)
def get_session_id(driver):
getter = """
sessionID = 'a';
fetch(URL)
.then((r) => r.text())
.then((data) => sessionID = (data))
.catch((e) => console.log('Error'));
"""
returner = r'return window.sessionID;'
driver.execute_script(getter)
print(driver.execute_script(returner))
while driver.execute_script(returner) == 'a':
pass
if len(driver.execute_script(returner)) == 42:
print('Got session ID successfully')
return driver.execute_script(returner)[3:-3]
else:
print('Not able to get session ID')