<p>您尝试自动化的页面是有角度的。通常,在基于脚本的页面中,您下载源代码,页面加载事件被归类为完成,然后运行一些JS脚本来获取/更新页面内容。这些脚本(可能需要几秒钟才能完成)使用您看到的页面更新DOM</p>
<p>相反,selenium只能识别页面是否已加载-selenium将尝试在此readystate点查找这些元素,并且不知道任何正在运行的脚本</p>
<p>在继续之前,您需要等待元素准备就绪</p>
<p>简单的解决方案是在脚本中添加隐式等待。
隐式等待将忽略NoTouchElement异常,直到达到超时</p>
<p>有关等待的更多信息,请参见<a href="https://selenium-python.readthedocs.io/waits.html" rel="nofollow noreferrer">here</a></p>
<p>这是要添加的代码行:</p>
<pre><code>driver.implicitly_wait(10)
</code></pre>
<p>只要根据需要调整时间就行了</p>
<p>你只需要一次</p>
<p>这是适用于我的代码:</p>
<pre><code>driver = webdriver.Chrome()
driver.get("https://v2.waitwhile.com/l/fostersbarbershop/list-view")
driver.implicitly_wait(10)
join = False
while not join:
try:
joinButton = driver.find_element_by_class_name("disabled")
print("Button isnt ready yet.")
time.sleep(2)
driver.refresh()
except:
joinButton = driver.find_element_by_class_name("public-submit-btn")
print("Join")
joinButton.click()
join = True
</code></pre>
<p>这是最终状态:
<a href="https://i.stack.imgur.com/fVRyM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/fVRyM.png" alt="enter image description here"/></a></p>