Selenium上的Javascript在Windows和Amazon Linux上有不同的行为

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

我正试图编写一个脚本(在Python上使用Selenium)来自动化我对大学图书馆的预订。脚本运行得很好,但由于预订期间的流量很大,页面加载时间很长

为了加快进程,我尝试在Selenium上通过javascript实现HTTP请求(下面的代码)。在我的windows上,它运行得很好,但是当我将更新后的脚本放在我的AmazonEC2(AmazonLinux)实例上时,它的行为有所不同。它们都在Python 3.9.4的最后一个稳定版本(90.0.4430.24)上运行ChromeDriver Headless

取回请求成功之前,它没有返回
'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')