JavascriptException: Сообщение: javascript ошибка: arguments [0] .click не является ошибкой функции с использованием arguments [0] .click через Selenium и Python - PullRequest
1 голос
/ 29 мая 2020

Я просматривал некоторые веб-сайты, чтобы найти места для практики. Этот код подводит меня к уровням отдельных городов гостиничного бренда, но всякий раз, когда я использую driver.execute_script ("arguments [0] .click ();", button) в моем коде (как видно из предпоследней строки), я получите эту ошибку:

JavascriptException: Message: javascript error: arguments[0].click is not a function

Ниже приведен пример кода, который я написал до сих пор.

for state in state_links:
driver = Chrome(path_to_chrome_driver)
link = 'https://www.ihg.com/destinations/us/en/united-states/' + state.lower().replace(' ', '-')
driver.get(link)
city_links = driver.find_elements_by_xpath('//div[@class="countryListingContainer col-xs-12"]//ul//div//li//a//span')
city_links = [thing.text for thing in city_links]
driver.close()
for city in city_links:
    driver = Chrome(path_to_chrome_driver)
    link2 = 'https://www.ihg.com/destinations/us/en/united-states/' + state.lower().replace(' hotels', '').replace(' ', '-') + '/' + city.lower().replace(' ', '-')
    driver.get(link2)
    hotel_links = driver.find_elements_by_xpath('//div[@class="hotelList-detailsContainer"]//div//div//p//a')
    hotel_links = [elem.text for elem in hotel_links]
    driver.close()
    for hotel in hotel_links:
        driver = Chrome(path_to_chrome_driver)
        driver.get(link2)
        driver.implicitly_wait(15)
        driver.execute_script("arguments[0].click();", hotel)
        driver.implicitly_wait(10)

1 Ответ

1 голос
/ 30 мая 2020

Это сообщение об ошибке ...

JavascriptException: Message: javascript error: arguments[0].click is not a function

... подразумевает, что вызов click () на arguments[0] с использованием execute_script() завершился неудачно.


Еще немного информации о шагах помогло бы нам построить канонический ответ. Однако, предположительно, поскольку вы собираете hotel_links сразу после:

driver.get(link2)
hotel_links = driver.find_elements_by_xpath('//div[@class="hotelList-detailsContainer"]//div//div//p//a')

Итак, изначально hotel_links содержит WebElements . Но в следующей строке вы перезаписываете List hotel_links с elem.text следующим образом:

hotel_links = [elem.text for elem in hotel_links]

Итак, hotel_links теперь содержит элементы типа text .

As text element не поддерживает click(), следовательно, вы двигаетесь вперед, когда вы пытаетесь вызвать click() в текстовых элементах через execute_script(), вы видите указанную ошибку.


Решение

Если вам нужен текст ссылок на отели, сохраните их в отдельном списке , как показано ниже:

hotel_links_text = [elem.text for elem in hotel_links]

Ссылка

Вы можете найти пару соответствующих обсуждений в:

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