Ошибка TypeError с WebDriverWait (Python / Selenium) - PullRequest
1 голос
/ 20 апреля 2020

У меня проблемы с использованием явного ожидания с Selenium. Я продолжаю получать следующую ошибку.

File "C:/Users/username/path/craigslist_scrape.py", line 108, in <module>
    WebDriverWait(driver,5).until(EC.text_to_be_present_in_element_value(By.XPATH('//p[@class="reply-email-address"]/a[@class="mail app"]')))

TypeError: 'str' object is not callable

Мой код выглядит следующим образом. В основном я пытаюсь очистить адрес электронной почты. Однако, в большинстве случаев, адрес электронной почты не виден, пока я не нажму «ответить». Я пытаюсь заставить Selenium нажать «Ответить» и подождать, пока адрес электронной почты не станет видимым, а затем очистить. Я пытался использовать несколько разных методов, но продолжал получать ту же ошибку. Не уверен, что именно произошло. Надеюсь, кто-нибудь может помочь.

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
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException

driver=webdriver.Chrome()
driver.get('https://nh.craigslist.org/search/reb')

link_list=[]

link=driver.find_elements_by_xpath('//li[@class="result-row"]/a[@href]')
for elem in link:
    print(elem.get_attribute('href'))
    link_list.append(elem.get_attribute('href'))
for link in link_list:
    driver.get(link)
    driver.find_element_by_xpath('//div[@class="actions-combo"]/button[@role="button"]').click()
    WebDriverWait(driver,5).until(EC.text_to_be_present_in_element_value(By.XPATH('//p[@class="reply-email-address"]/a[@class="mail app"]')))
    email=driver.find_element_by_xpath('//p[@class="reply-email-address"]/a').text
    print(email)

1 Ответ

1 голос
/ 20 апреля 2020

Хорошо, я понял, что вы хотите сделать ...

Проблема в том, что вы вызываете неправильную функцию с неправильными параметрами. Вот правильный способ его вызова:)

WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '/html/body/section/section/header/div[2]/div/div[1]/aside')))

Основная проблема заключается в том, что вы сообщаете функции, какой элемент должен искать, используя какую функцию ...

Здесь ТАК ответ, который отвечает лучше, чем я: Селен - подождать, пока элемент присутствует, видим и интерактивен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...