Невозможно найти кнопку с селеновым питоном - PullRequest
0 голосов
/ 06 июня 2019

У меня была похожая проблема на днях, и я решил ее, используя xpath, так как элемент, который я искал, не был в исходном URL

Я пытаюсь создать скрипт, чтобы отписаться от кого-то в Instagram, и я могу попасть на страницу их профиля - это всего лишь вопрос поиска кнопки. Я пробовал использовать xpath и css selector

driver = webdriver.Chrome('C:\*\chromedriver.exe')
driver.get("https://www.instagram.com/accounts/login/")

elem2 = driver.find_element_by_name("username")
elem2.send_keys('*')
elem3 = driver.find_element_by_name("password")
elem3.send_keys('*')
elem3.send_keys(Keys.ENTER)
while True:
    try:
        elem4 = driver.find_element_by_css_selector(".-Cab_, .bIiDR")
        elem4.click()
        break
    except Exception:
        pass


names = ['chucknorris']
for i in names:
    elem5 = driver.find_element_by_xpath('//*[@id="react-root"]/section/nav/div[2]/div/div/div[2]/input')   
    elem5.send_keys(i)
    time.sleep(1)
    while True:
        try:
            elems = driver.find_elements_by_class_name("yCE8d")
            elems[0].click()
            break
        except Exception:
            pass

##    while True:
##        try:
##            elemL = driver.find_elements_by_xpath('//*[@id="react-root"]/section/main/div/header/section/div[2]/div/span/span[1]')
##        except Exception:
##            pass
#This part was just so I got the error message rather than infinite loop of nothing
    time.sleep(4)
    elemL = driver.find_element_by_xpath('//div[@id="react-root"]/section/main/div/header/section/div[2]/div/span/span[1]/button')
    elemL.click()

'elemL' - требуемый элемент кнопки

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Ваш исходный xpath не выполнен по двум причинам.

  1. Элемент с идентификатором «response-root» является span, а не div.(Он работал в вашем другом xpath, потому что у вас был *)
  2. Дочерний div под элементом section - это первый div, а не второй.

Другой вариант - простосделайте это (если вы уверены, что текст кнопки не будет меняться слишком часто:

driver.find_element_by_xpath('//*[@id="react-root"]//main//button[.="Following"]')
0 голосов
/ 06 июня 2019

Мой ответ состоял в том, чтобы использовать driver.find_element_by_css_selector ('.- fzfL'), который имел атрибут цвета фона и т. Д. (Действительно, не уверен, что это важно)

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