dal*_*ous 3 python selenium xlrd selenium-webdriver
下面是我的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 ()
Run Code Online (Sandbox Code Playgroud)
有没有办法设置这个行为我上面说的方式?我知道selenium等待页面加载,但文本框不是正常的,并且似乎有自己的加载,旋转轮.
总结和解决方案 答案如下.我愚蠢的东西有一些语法错误.这个页面也非常有用.
您想使用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')))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15184 次 |
| 最近记录: |