即使在等待

时间:2018-04-29 01:37:04

标签: python html selenium

我在 Python 脚本上使用selenium来获取一些数据并在javascript / ajax呈现的网站上执行一些脚本,这意味着一些按钮或脚本将更改DOM而不加载新页面或更改网址。

情况是:加载页面后,我执行以下脚本:

driver1.execute_script("javascript:changeOption('a', 'b','otherPage.html');")

changeOption是直接在HTML脚本标记内编写的脚本。它有效,脚本将导致DOM发生变化。

现在,DOM已经改变,并且有直接在HTML上编写的新脚本,我可以在Chrome的检查器“Elements”选项卡中清楚地看到。我等了几秒钟,然后尝试运行一个新脚本:

driver1.execute_script("javascript:filterOption(0);")

我收到错误!它说这个脚本'filterOption'不存在。

经过一番调查,我注意到selenium没有意识到DOM已经改变,并且页面内部有新的元素和脚本!这就是它说新脚本不存在的原因。

到目前为止我尝试了什么:

  • 隐式和明确的等待。两者都没有。
  • time.sleep(),在执行第二个脚本之前有几秒钟。也没用。
  • 强行尝试在while循环中使用“try ... except”语句执行脚本。从不工作,总是去例外。
  • 检查页面selenium是否“看到”是更新页面,再次执行第一个脚本,检查一些元素,等待新元素出现等等。不,它不是:selenium真的没有注意到DOM已更新,肯定是

我在这里做了一些研究,并在文档中寻找一些方法来强制selenium再次读取DOM而不刷新页面,因为刷新会导致它返回到第一页并丢失所有更改。看起来没有办法做到这一点,我找到的每一个答案都不同而且没有用。

您对我能做什么有什么建议吗,Selenium会注意到DOM上有新脚本?

谢谢!

P.S:我正在使用最新的硒与Python 3和Chrome。

1 个答案:

答案 0 :(得分:0)

<强>解决!

事实证明新代码是在iFrame中呈现的,这就是为什么selenium以前无法看到它。