Выбор элемента Selenium: Instagram Комментарии - PullRequest
1 голос
/ 27 апреля 2020

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

Это мой код:

## url of the insta photo
url = 'https://www.instagram.com/p/B_cyBxwBDyd/'
driver.get(url)
sleep(randint(15,20))
# start at the first comment and end at the 10th comment
n = 1
while n <= 10:

    ## get username and click on it
    username_button = driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/div[1]/ul/ul['
                                                   + str(n) + ']/div/li/div/div[1]/div[1]/a')

    username_button.click()

    ## click on the username's first photo and repeat the process for 10 phots
    for x in range(0,10):
        photo =  driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div[3]/article/div[1]/div/div[1]/div[1]')
        photo.click()

        button_like = driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[1]/span[1]/button')
        button_like.click()
## comment on a few of the photos, set up a probability scheme so not all the photos get a comment
        comm_prob = randint(1,10)
        print('{}_{}: {}'.format(x, n,comm_prob))
        if comm_prob > 3:
            comments += 1
            sleep(randint(15,28))
            driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[1]/span[2]/button').click()

            comment_box = driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/article/div[2]/section[3]/div/form/textarea')
            if (comm_prob == 4):
                comment_box.send_keys('OMG amazing!')
                sleep(1)
            elif (comm_prob == 5):
                comment_box.send_keys('absolutely flawless!!')
                sleep(1)
            elif (comm_prob == 6):
                comment_box.send_keys('OMG obcessed')
            elif (comm_prob == 7):
                comment_box.send_keys('so pretty!!')
                sleep(1)
            elif comm_prob == 8:
                comment_box.send_keys('I love this!!')
                sleep(1)
            elif comm_prob == 9:
                comment_box.send_keys('I love this shot (:')
                sleep(1)
            elif comm_prob == 10:
                comment_box.send_keys('perfect!')
                sleep(1)
            # Enter to post comment
            comment_box.send_keys(Keys.ENTER)
            sleep(randint(15,28))

        driver.find_element_by_link_text('Next').click()

    ## back to the comments page

    driver.get(url)

    n += 1

Я получаю ошибку:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[4]/div[2]/div/article/div[2]/div[1]/ul/ul[1]/div/li/div/div[1]/div[1]/a"}

однако, когда я копирую xpath из первого комментария, это:

/html/body/div[4]/div[2]/div/article/div[2]/div[1]/ul/ul[1]/div/li/div/div[1]/div[1]/a

, поэтому я не уверен, почему он не может найти элемент?

Это скриншот из проверки страницы: скриншот

Спасибо всем заранее!

1 Ответ

0 голосов
/ 28 апреля 2020

ВНИМАНИЕ! Это работает с Chrome V.81 и с Useragent как ChromeBrowser и Android!

Я не могу ответить, почему ваш абсолютный путь не работает. Вам лучше попробовать относительные пути, как это:

self.browser.find_elements_by_xpath("//a[@class='sqdOP yWX7d     _8A5w5   ZIAjV ']")

С этим вы можете обосрать все доступные комментарии и обрабатывать их как список. Этот код ищет elementSSS! Не Элемент.

list = self.browser.find_elements_by_xpath("//a[@class='sqdOP yWX7d     _8A5w5   ZIAjV ']")
    for x in list:
        x.click()
        # do STUFF

РЕДАКТИРОВАТЬ:

Если мы возьмем код с вашей фотографии, он должен выглядеть следующим образом:

Xpath = "//a[@class='_2dbep qNELH     kIKUG']"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...