【问题标题】:How to fix,code doesnt wait until webdriver find element and procceed with next line of code = error如何修复,代码不会等到 webdriver 找到元素并继续下一行代码 = 错误
【发布时间】:2019-07-24 06:20:36
【问题描述】:

我正在开发一个连接到网络并上传+下载大量文件的程序,但是在没有time.sleep() 的情况下运行后,它以错误结束。

我尝试更改以查找另一个元素,但我不想使用time.sleep() 函数来执行此操作,因为并非所有文件都太大。

for z in prevadzka:
basepath = path_ + z + '\\'
file_x = [fn for fn in os.listdir(basepath) if fnmatch.fnmatch(fn, 'P???????.*')]
fin_nazov = 0
for x in file_x:
    # upload button
    file_upload = WebDriverWait(driver,30).until(
        EC.presence_of_element_located((By.XPATH,xpath_upload)))
    file_upload.send_keys(os.path.abspath(basepath + x))

    overit = WebDriverWait(driver,30).until(
        EC.element_to_be_clickable((By.XPATH, xpath_overit)))
    driver.find_element_by_xpath(xpath_overit).click()
    #time.sleep(10)
    prevziat = WebDriverWait(driver,300).until(EC.element_to_be_clickable((By.XPATH, xpath_prevziat)))
    driver.find_element_by_xpath(xpath_prevziat).click()
    #prevziat.click() 
    time.sleep(2.5) # time for download file
    driver.get(link)
driver.close()

我希望代码等到下载按钮出现(它没有) 然后继续处理其他文件。

【问题讨论】:

    标签: python-3.x selenium-webdriver webdriverwait


    【解决方案1】:

    我想通了,我需要在复制 XPATH 之后添加 '\a',以便 python 知道它是一个等待的链接。

    '//*[@id="A5540:j_idt30:downloadLink"]/a' 
    

    而不是

    '//*[@id="A5540:j_idt30:downloadLink"]'
    
    prevziat = WebDriverWait(driver,300).until(EC.element_to_be_clickable((By.XPATH, xpath_prevziat + '\a')))
    driver.find_element_by_xpath(xpath_prevziat).click()
    

    【讨论】:

      【解决方案2】:

      在绝大多数情况下,使用浏览器自动化下载文件效率不高,如果您的xpath_prevziat 定位器与<a> tag 匹配,您可以通过WebElement.get_attribute() 函数获取其href 属性并执行file download by Python means,例如使用urllib

      urllib.request.urlretrieve(prevziat.get_attribute('href'), prevziat.text) 
      

      如果站点采用身份验证,您可以通过WebDriver.get_cookies() 函数和add them to the urllib request 从浏览器获取cookies

      【讨论】:

      • 感谢您的回答,但我的 xpath 指的是元素和“下载链接”而不是特定的 href xpath_prevziat = '//*[@id="A5540:j_idt23:downloadLink"]'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多