当前位置: 首页 > 知识库问答 >
问题:

未加载用于Selenium测试的Javascript

狄海
2023-03-14
  • 使用geckodriver和Firefox的无头和无头(有头??)版本
  • 将chromedriver与Chrome的无头和无头版本一起使用
  • 检查了pip3和Selenium是否都是最新的稳定版本
  • 使用用户代理配置文件打开Chrome
  • 使用随机用户代理配置文件(来自random_user_agent库)打开Chrome
  • 硬编码最多等待30秒(time.sleep)
  • 在请求中加载页面(事后看来,如果我在寻找javascript,这是愚蠢的--不起作用)

URL

我的理论是他们以某种方式阻止了硒,也许是这样?但我没有办法测试。当不使用Selenium浏览器实例(即常规浏览器)加载页面时,问题不会持续存在。下面是我的代码:

from selenium import webdriver

# requirements to wait until specific part of page is open
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--lang=en_US")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
options.add_argument("disable-infobars")

browser = webdriver.Chrome(options=options)        
delay = 5
browser.get("https://shop.coles.com.au/a/alexandria/product/nutella-spread-chocolate-hazelnut-2620684p")
# this is where the page is not loading & therefore throwing ElementNotFound exception

try:
    price_dollars = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.CLASS_NAME, "price-dollars")))
    price_cents = browser.find_element_by_class_name("price-cents")
    
    # converts strings into floats with decimals (to one place only)
    fl_price_dollars = float(price_dollars.text)
    fl_price_cents = float(price_cents.text)
    fl_price_concat = fl_price_dollars + fl_price_cents*10**-2
    print(type(fl_price_concat)) # check this is a float type not string
    print(fl_price_concat)
except TimeoutException:
    print("Timeout1")
    pass
except NoSuchElementException:  # need to catch all exceptions & pass to quit() or processes will continue to run
    print("Element not found")
    pass

browser.quit()

使用Selenium browser实例打开页面时加载的页面源代码:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="shortcut icon" href="about:blank">
</head>
<body>
<script src="/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/j.js"></script>
<script src="/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/f.js"></script>
<script src="/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/fingerprint/script/kpf.js?url=/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/fingerprint&token=c2e6cd9a-e76e-cd51-288d-f604aea52023"></script>
</body>
</html>

编辑以下答案在2020年6月为我工作

共有1个答案

史昊焱
2023-03-14

尝试添加以下参数:options.add_argument(“--disable-blink-features=automationcontrolled”)

关键是使'Navigator.WebDriver'返回未定义。如果Chrome由Webdriver控制(由Selenium使用),则返回“true”。

如果您添加了这个参数,那么javascript调用(您可以在dev tools控制台中测试它)Navigator.WebDriver将返回'undefined',这与在普通Chrome中运行该参数相同。

 类似资料:
  • 但是,对于以下所有使用chromedriver的测试,浏览器都不能成功导航到URL。 浏览器启动,瞬间显示字符数据;出现在地址栏中(就像第一个测试中一样),然后将正确的URL插入到地址栏中。但是,页面永远不会加载,你得到了标准的chrome这个网页不可用的消息,在浏览器的正文/画布上有两个按钮reload和更多。 这是已知的问题吗? 以下异常将被删除: NosuchWindowException:

  • 好的——问题似乎已经解决——请参阅下面的工作解决方案。 问题= 我查询的元素是谷歌广告部门,我想确保我们在所有平台上都提供广告。加载是异步的,所以我要确保等待页面加载。 当我从ruby shell(irb)手动驱动selenium时,我总是能够在IE版本9、10、11中找到元素。当我手动导航到浏览器堆栈的“Live”浏览器内IE仿真中的站点时也是如此。 但是——当我通过RSpec以编程方式运行与s

  • 主要内容:1. 项目依赖文件配置,2. @Test(invocationCount =?),3. @Test(invocationCount = ? threadPoolSize = ?),4. 负载测试示例在本教程中,我们将演示如何使用属性和在网站上执行负载测试或压力测试。 使用的工具 : TestNG 6.8.7 Selenium 2.39.0 Maven 3 我们使用库自动化浏览器来访问网站。创建一个用于测试的Maven项目:TestngSelenium 。 1. 项目依赖文件配置 获取T

  • 我有一个使用对象标签嵌入ActiveX(*. CAB文件)的网站: 但是,当通过Selenium打开网站时,ActiveX不会加载,这会阻止我测试此网站。这在使用Selenium 2.44.0 RemoteWebDriver的IE 9和IE 10中都会发生。如果浏览器不是由Selenium WebDriver初始化的,则该站点工作正常。 WebDriver是否默认禁用ActiveX加载?如何重新启

  • 请看一下这个项目:https://github.com/darzz/boot_bug这是复制错误的最小设置。 描述:应用程序堆栈是Spring Boot,包含Spring数据和Spring批处理。有testNamedQuery。hbm。src/main/resources/querys下的xml文件。 从应用程序类运行时,批处理作业成功完成,日志中没有异常。但是,当从ApplicationNotW

  • 我正在自动化我的github配置文件,下面是我的测试用例: null 我们如何管理TestInitialize()类,使:-browser与baseurl一起运行,直到完成所有测试。我们如何管理TestCleanup(),使:-browser只在所有测试完成后才关闭。