selenium.common.exceptions.WebDriverException:消息:尝试使用selenium和Python单击元素时,未能将数据转换为对象

2024-10-03 11:13:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在登录后单击页面上的一个按钮,该按钮如下所示

<div id="carrierDashboardControls">
      <button class="yms-button-primary" ng-click="refresh()">
         <t>Refresh</t>
      </button>
      <button class="yms-button-primary-alt ng-isolate-scope" ng-csv="fetchData()" lazy-load="true" 
  csv-header="getCsvHeader" filename="carrier-dashboard.csv" field-separator=",">CSV
      </button>
</div>

这里有两个按钮,我想点击一个有类的按钮 “yms按钮主alt ng隔离作用域” 然而,我得到了以下错误

单击此按钮将下载CSV文件,但现在我收到错误“selenium.common.exceptions.WebDriverException:消息:无法将数据转换为对象”

我目前正在使用下面的代码,请注意,由于业务的性质,实际的url无法共享(由于登录后重定向,我导航到url两次)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import re
import pandas as pd
import os


url = "THE URL"
username = 'USERNAME'
password = 'PASSWORD'

driver = webdriver.Firefox(executable_path=r'MYPATH/geckodriver.exe')
driver.implicitly_wait(100)
driver.get(url)

user_field = driver.find_element_by_id("ap_email")
pass_field = driver.find_element_by_id("ap_password")
sign_in = driver.find_element_by_id("signInSubmit")
user_field.send_keys(username)
pass_field.send_keys(password)
sign_in.click()
driver.implicitly_wait(100)
driver.get(url)
CSV_BUTTON = driver.find_element_by_class_name("yms-button-primary-alt ng-isolate-scope")
CSV_BUTTON.click()

作为一个补充说明,我想操纵文件,下载后,因为我想有它自动重命名与当前日期和时间,如果这是可能的

下面是完整的堆栈跟踪

Traceback (most recent call last):
  File "C:/Users/USER/PycharmProjects/YMS scrape/venv/YMS Sel#.py", line 26, in <module>
    CSV_BUTTON = driver.find_element_by_class_name("yms-button-primary-alt ng-isolate-scope")
  File "C:\Users\USER\Anaconda3\envs\YMS scrape\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\Users\USER\Anaconda3\envs\YMS scrape\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\Users\USER\Anaconda3\envs\YMS scrape\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\USER\Anaconda3\envs\YMS scrape\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to convert data to an object

Tags: inimportfieldbydriverseleniumbuttonelement
1条回答
网友
1楼 · 发布于 2024-10-03 11:13:20

所需的元素是通过可见的动态元素,因此要在元素上click(),必须为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.yms-button-primary-alt.ng-isolate-scope[csv-header='getCsvHeader'][ng-csv^='fetchData']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='yms-button-primary-alt ng-isolate-scope' and @csv-header='getCsvHeader'][contains(., 'CSV')]"))).click()
    
  • 注意:您必须添加以下导入:

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

相关问题 更多 >