Нажмите на ссылку в Kickstarter, используя Selenium - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь очистить Kickstarter, основываясь только на названиях проектов. Используя название проекта и базовый URL, я могу попасть на страницу поиска. Чтобы очистить страницу проекта, мне нужно использовать Selenium, чтобы кликнуть по URL. Тем не менее, я не могу указать Selenium на правильный элемент для нажатия. Я также хотел бы, чтобы это было динамичным, поэтому мне не нужно каждый раз указывать название проекта.

<div class="type-18 clamp-5 navy-500 mb3">
    <a href="https://www.kickstarter.com/projects/1980119549/knife-block- 
    designed-by-if-and-red-dot-winner-jle? 
    ref=discovery&amp;term=Knife%20block%20- 
    %20Designed%20by%20IF%20and%20Red%20dot%20winner%20JLE%20Design" 
    class="soft-black hover-text-underline">Knife block - 
    Designed by IF and 
    Red dot winner JLE Design
    </a> 
</div>`   

driver = webdriver.Chrome(chrome_path)
url = 'https://www.kickstarter.com/discover/advanced?ref=nav_search&term=Knife 
       block - Designed by IF and Red dot winner JLE Design' 
driver.get(url)

elem = driver.find_elements_by_link_text('Knife block - Designed by IF and Red 
       dot winner JLE Design')
elem.click()

Как я могу заставить элемент указывать на правильную ссылку?

1 Ответ

0 голосов
/ 07 мая 2018

Что касается вашей попытки, ваш код имел опечатку: использование find_elements.... возвращает список элементов, поэтому метод .click() не будет работать. Вы хотите использовать find_element.

Для динамического перехода по ссылкам используйте XPath. Полученный код будет:

elem = driver.find_element_by_xpath('//div[contains(@class, "type-18")]/a')
elem.click()

Это будет первый матч. Вы можете сделать find_elements и перебрать элементы, но это будет плохой подход, потому что, так как вы нажимаете на ссылки, каждый раз, когда предыдущая страница оказывается устаревшей. Если их несколько, вы можете использовать тот же XPath, но индексированный:

first_elem = driver.find_element_by_xpath('(//div[contains(@class, "type-18")]/a)[1]')
first_elem.click()
# ...
second_elem = driver.find_element_by_xpath('(//div[contains(@class, "type-18")]/a)[2]')
second_elem.click() 
# And so forth...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...