python - 强制 Selenium 暂停并等待字段可用

标签 python selenium selenium-webdriver xlrd

下面是我的 python 脚本中的一段代码,它读取一个 excel 文件并将一行中的单元格分配给一个变量,然后将该变量输入到浏览器的一个字段中。它工作得很好......在大多数情况下。我想做的是在浏览器加载页面后设置某种循环以执行以下操作:

通过一些 ID 找到元素。如果失败,请等待 5 秒,然后重试。如果成功,则继续执行脚本的其余部分。现在对我放轻松,这是我第一次真正的尝试。我曾尝试嵌套 try/except 语句,但很快就变得非常困惑。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
import xlrd

workbook = xlrd.open_workbook("my_excel_file.xlsx")
worksheet = workbook.sheet_by_name('Sheet1')
x = 0
for current_row in range(worksheet.nrows):
    try:
        cmt = worksheet.row(current_row)[2].value
        browser = webdriver.Firefox() # Get local session of firefox
        browser.get("http://www.somewebsite.com") # Load page
        time.sleep(5)
        #this timer is the issue, if the field takes 6 seconds to be ready, script fails
        comment = browser.find_element_by_id("slow_comment_box") # Find the comment box
        comment.send_keys(str(cmt) + Keys.RETURN)
        x += 1
    except:
        print ("Error on " + str(x))
        quit ()

有没有办法将其设置为按照我上面所述的方式运行?我知道 selenium 等待页面加载,但文本框不是普通文本框,似乎有自己的加载、纺车。

总结与解决 答案如下。我的愚蠢的东西有一些语法错误。 this page was extremely useful as well.

最佳答案

您想使用 WebDriverWait

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.Id, 'id')))

关于python - 强制 Selenium 暂停并等待字段可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999661/

相关文章:

python默认配置变量重用

java - 如何使用 Selenium WebDriver 截取屏幕截图

javascript - Selenium IDE - 如何创建与今天日期相关的 JavaScript 函数?

firefox - 如何使用 webdriver 在 Firefox 中禁用阅读器 View

java - 无法在 Selenium 3 中启动 Microsoft Edge 浏览器

selenium - 如何使用 Selenium 2 发送 http RequestHeader?

python - python扭曲静态文件中的变量替换

python mechanize.browser submit()相关问题

Selenium Java 类中的 javax.net.ssl.SSLHandshakeException

python - 如何在未安装以前版本的 Linux 中安装 Python