Python Selenium:execute_脚本是否能够等待javascript内容加载?

Python Selenium:execute_脚本是否能够等待javascript内容加载?,javascript,python,selenium,wait,Javascript,Python,Selenium,Wait,我正在尝试使用python和selenium(使用safari)自动化一个简单的操作: 我有一个网页,上面有一个从“a”到“Z”的列表,当你点击它时,每个字母都会在页面上激活一个Javascript(至少我想,我对Javascript和HTML不太了解),在字母列表下面形成一个表格,重新加载并输出一个股票列表(“a”给你以字母a开头的股票,“B”所有以字母B开头的股票,等等……) 我的目标是单击每个按钮,列出表中的所有库存,用Python存储列表,然后转到下一个字母。 因此,我创建了一个方法,该

我正在尝试使用python和selenium(使用safari)自动化一个简单的操作: 我有一个网页,上面有一个从“a”到“Z”的列表,当你点击它时,每个字母都会在页面上激活一个Javascript(至少我想,我对Javascript和HTML不太了解),在字母列表下面形成一个表格,重新加载并输出一个股票列表(“a”给你以字母a开头的股票,“B”所有以字母B开头的股票,等等……) 我的目标是单击每个按钮,列出表中的所有库存,用Python存储列表,然后转到下一个字母。 因此,我创建了一个方法,该方法单击作为参数传递的字母,但我希望python在允许该表转到下一行代码之前等待该表“加载”,因为现在它正在创建问题,因为在加载该表之前,脚本在下一个字母上运行

我用于单击按钮的命令是:

driver.execute_脚本(“参数[0]。单击();”,driver.find_元素_by_xpath(f”//li[text()='{Stock_Letter.upper()}']))
其中driver是我的SeleniumWebDriver,Stock_字母是包含我要单击的元素的方法参数 要循环使用我使用的所有字母:

alphaB=[“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”、“y”、“z”]
对于字母B中的lettre:
Session.GoToGamePage(page='buysell',Stock_Letter=lettre.upper())
(Session是我的对象,GoToGamePage是我用来单击预期字母的方法,它包含与游戏相关的其他内容)

我尝试使用selenium的wait.until方法,但问题是表的第一个元素无论字母如何都具有相同的HTML属性,因此除非存在selenium期望的等待特殊文本的条件,否则我不知道如何做?或者甚至是一个期望条件等待属性的第一个字母成为某个值,但我找不到关于期望条件的完整文档?? 我的第一个猜测是在execute_脚本命令中对等待进行编码,但我真的不知道怎么做? 如果您需要有关网页本身的任何进一步信息,请告诉我,以下是第一个表行数据:


有关网页如下:


但是您需要在上创建一个帐户(非常快速),并使用代码195(如果您愿意,请随时参加交易竞赛!)

来回答您的第一个问题——不,
execute\u script
不做任何等待。它只是在页面上运行一些Javascript,就这样。您提到表中的第一个元素与所有其他元素具有相同的HTML属性,因此您不能只等待该元素。这是有道理的

您可以尝试等待选择器找到的所有元素出现,看看这是否有帮助

WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, "//li[text()='{Stock_Letter.upper()}']")))
您还可以使用
text\u to\u present\u in\u element
等待
元素。text
等于某个值,或者您可以根据HTML的外观,等待
text\u to\u present\u in\u element\u value
等待元素的
属性等于某个值

本文档可能有助于:


谢谢您的文档链接和您的帮助,我想我真的很接近解决方案,但是
text\u to\u be\u present\u in\u element
text\u to\u present\u in\u element\u value
能够部分匹配吗?就像这里,我不知道元素的确切值,但我肯定知道第一个字母是什么!如果这是可能的,那么多亏了你,我就不再有问题了:)基于
to_be___present
的语言,我会假设它将执行部分匹配——否则,我会期望该条件被称为
to_be__equal
。但是,这只是分析所使用的语言——在代码中测试它将是查看实际情况的真正检查。好吧,我尝试了它,但它不起作用,因为这是部分匹配,因为我只要求一个字母,即使表尚未加载,也可以进行匹配:(我甚至尝试了锚定“^”但是它没有找到任何匹配项,如果它可以与正则表达式一起工作,这将是非常棒的…甚至可以与element.text[1]匹配?或者使用xpath表达式来查找第一个字符?好的,基本上是查找xpath来查找第一个字符,我找到了我的答案,谢谢你引导我走上了好的道路!