Селен вылетает: TypeError: объект 'str' не вызывается

Я пытаюсь провести интеллектуальный анализ данных на веб-сайте. Я использую селен с веб-драйвером внутри цикла for. Проблема в том, что мой код дает сбой, когда я настраиваю его на ожидание.

На сайте вам нужно нажать на картинку, которая отправит заказ на отдачу вам файла. В случае Firefox вам нужно указать, хотите ли вы загрузить его или сохранить. Это уже решено, однако когда дело доходит до перехода на следующий веб-сайт, происходит сбой.

Проблема в том, что последняя строка приводит к TypeError: 'str' object is not callable.

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

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", "D:path")
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.google-earth.kml+xml")

for i in urls['tubicacion']:  
    driver = webdriver.Firefox(firefox_profile=profile, 
                           executable_path=r'path\geckodriver-v0.24.0-win64\geckodriver.exe')

    driver.maximize_window()

    driver.get(i)
    elemen = driver.find_element_by_xpath('//*[@id = "GOOGLE"]').click()
    driver.implicitly_wait(0)
    follow = WebDriverWait(driver,5).until(EC.invisibility_of_element_located(By.XPATH('//*[@id = "GOOGLE"]'))).click().close()

Я также пробовал последнюю строку, например:

WebDriverWait(driver,5).until(EC.invisibility_of_element_located(By.XPATH('//*[@id = "GOOGLE"]').text)).click().close()

Не делайте .text !! вам нужно нажать на элемент, не нужно извлекать текст

Wonka 10.07.2019 12:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
715
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это должно решить вашу проблему, удалите .text. Я также удаляю .close

WebDriverWait(driver,5).until(EC.invisibility_of_element_located(By.XPATH('//*[@id = "GOOGLE"]'))).click()

Я получил это сообщение File "<ipython-input-43-a20e9012b89b>", line 26, in <module> follow = WebDriverWait(driver,5).until(EC.invisibility_of_element_loc‌​ated(By.XPATH('//*[@‌​id = "GOOGLE"]'))).cli‌​ck() TypeError: 'str' object is not callable

user143853 10.07.2019 12:41
Ответ принят как подходящий

Использование By.XPATH с кортежем

WebDriverWait(driver,5).until(EC.visibility_of_element_located((By.XPATH, '//*[@id = "GOOGLE"]')))

Это поднимает эту проблему ^ SyntaxError: invalid syntax

user143853 10.07.2019 13:31

@user143853 user143853 Не эта строка, я проверил. Где именно ошибка?

Guy 10.07.2019 13:33

Там, если я создам By.XPATH кортеж, возникнет эта ошибка.

user143853 10.07.2019 14:26

@ user143853 Ты что-нибудь изменил? добавили или убрали что-то? опубликуйте строку, которая дает вам ошибку.

Guy 10.07.2019 14:28

Подождите, я скопирую вашу строку, и вот что я получаю сейчас: raise TimeoutException(message, screen, stacktrace) TimeoutException

user143853 10.07.2019 14:38

@ user143853 ты уверен, что хочешь invisibility_of_element_located, а не visibility_of_element_located? вы хотите щелкнуть по нему в конце концов, вы не можете сделать это, если элемент невидим.

Guy 10.07.2019 14:41

Это веб-сайт связь. Если я использую visibility_of_element_located, он работает отлично. Однако каждый раз он открывает новый браузер, и я пытаюсь загрузить 600 000 файлов. Так что мне нужно, чтобы закрыть браузер и открыть его снова. Или оставьте его открытым и просто измените URL-адрес, загрузите файл и так далее.

user143853 10.07.2019 14:55

@ user143853 Это совершенно другой вопрос, его следует опубликовать как новый вопрос, а не в комментариях.

Guy 10.07.2019 14:56

Хорошо, я так и сделаю. Спасибо!

user143853 10.07.2019 15:03

Другие вопросы по теме