下面是我的 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 ()
有没有办法将其设置为我上面所说的方式?我知道硒等待页面加载,但文本框不是普通的文本框,并且似乎有自己的加载、旋转轮。
总结及解决方案答案如下。我的愚蠢的东西有一些语法错误。这个页面也非常有用。 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
你想使用WebDriver等待 http://selenium-python.readthedocs.org/en/latest/waits.html#explicit-waits
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')))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)