Как мне нажать на 2-й элемент HTML, который является дубликатом первого элемента с использованием селена и Python? - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу нажать на элемент, который копируется по всему сайту (это кнопка), но как я нажимаю, скажем, вторая кнопка, а не первая. Вот код кнопки, которую я хочу нажать:

<a href="/us/en/outletus/laptops/thinkpad/thinkpad-x-series/ThinkPad-X280/p/20KFCTO1WW-PC0YQ4GF" class="button-called-out button-full facetedResults-cta">SHOP NOW</a>

Однако проблема в том, что иногда он может выделяться серым цветом, если товара нет в наличии, поэтому я не хочу нажимать на него какрезультат, вот весь мой код:

def mainclick(website):
    while True:
        time.sleep(1)
        price_saved = [i.text.replace('$', "").replace(',', '') for i in driver.find_elements_by_css_selector('[itemprop=youSave]')]
        print(price_saved)
        for g in range(len(price_saved)):
            a = g + 1
            if float(price_saved[g]) > 200:
                try:
                    driver.find_element_by_link_text("SHOP NOW")[a].click()
                    time.sleep(3)
                    try:
                        driver.find_element_by_id("addToCartButtonTop").click()
                        driver.execute_script("window.history.go(-1)")
                    except:
                        driver.execute_script("window.history.go(-1)")
                except:
                    print("couldn't click")
                    pass
            print(a)
        driver.find_element_by_link_text("Next Page").click()
    print("all pages done")
# starts time
start_time = time.time()
mainweb = "https://www.lenovo.com/us/en/outletus/laptops/c/LAPTOPS?q=%3Aprice-asc%3AfacetSys-Memory%3A16+GB%3AfacetSys-Processor%3AIntel%C2%AE+Core%E2%84%A2+i7%3AfacetSys-Processor%3AIntel%C2%AE+Core%E2%84%A2+i5%3AfacetSys-Memory%3A8+GB&uq=&text=#"
driver.get(mainweb)
mainclick(mainweb)

Я пытался использовать [a], чтобы нажать на определенный, но, похоже, он не работает. Кроме того, href может изменить кнопку магазина в зависимости от продукта.

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Вы можете собрать элементы, используя .find_elements*.

elements = driver.find_elements_by_link_text('insert_value_here')
elements[0].click()

Приведенный выше пример для щелчка по первым элементам.

Этот индекс [0] замените на то, что вы хотите.

0 голосов
/ 30 сентября 2019

Если вы уверены, что каждый раз, когда вы хотите нажать на 2-ю кнопку, попробуйте использовать ниже xpath,

(//*[@class='button-called-out button-full facetedResults-cta'])[2]

Если количество кнопок не одинаково (может быть серым), попробуйте использовать findelements

List button=driver.findElements(By.xpath("//*[@class='button-called-out button-full facetedResults-cta']"));

button.size();

Присоедините button.size () к xpath вместо «2» динамически, вы можете нажать на вторую / первую не серую кнопку

0 голосов
/ 29 сентября 2019

Вы можете использовать XPath с индексом a:

driver.find_element_by_xpath("(//a[.='SHOP NOW'])[{}]".format(a))

Обратите внимание, что первый элемент имеет индекс 1.

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