Ошибка при поиске xpath, который содержит определенный класс (python, селен, хромедрайвер) - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь найти элемент в красной рамке ниже. Поскольку информация об этом конкретном элементе изменяется, я использую класс, выделенный выше class = "_2z6nI", чтобы сослаться на элемент, выделенный красным, поскольку местоположение этого класса и его отношение к элементу, который я пытаюсь нажать, остаются постоянными.

enter image description here

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//body//div[contains(@class,'_2z6nI')]*how do I define additional divisions here?*)).click()

Буду признателен за объяснение того, как определить дополнительный путь, который должен быть записан после [содержит (@class, '_ 2z6nI')] чтобы добраться до красного элемента в штучной упаковке. Для ссылки на элемент, который я пытаюсь щелкнуть, это первое сообщение пользователя Instagram на домашней странице пользователя.

Обновлено:

Некоторые проверяемые коды:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time

class bot:

    def __init__(self):
        self.driver = webdriver.Chrome("path here")

    def zoom(self, new_zoom):
        """
        :param new_zoom: zoom level as a percentage
        """
        change_js = """
        var selectBox = document.querySelector("settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("settings-appearance-page").shadowRoot.querySelector("#zoomLevel");

        var changeEvent = new Event("change");

        selectBox.value = arguments[0];
        selectBox.dispatchEvent(changeEvent);
        """

        self.driver.get("chrome://settings/")
        new_zoom = round(new_zoom / 100, 2)
        self.driver.execute_script(change_js, new_zoom)

    def accessPlayerProfile(self):
        driver = self.driver
        driver.get("https://www.instagram.com/zuck/")
        time.sleep(2)
        #click on first post
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "(//div[contains(@class,'Nnq7C weEfm')])[1]"))).click()

if __name__ == "__main__":
    bot = bot()
    bot.zoom(80)
    bot.accessPlayerProfile()

1 Ответ

1 голос
/ 03 апреля 2020

В вашем примере вы пропустили пробел перед символом подчеркивания и пытаетесь перейти к дочернему div, чтобы вы могли обратиться к следующему решению

//body//div[contains(@class,' _2z6nI')]//article//div//div//div/div

Вы также можете использовать ниже xpath: ( updated )

  (//div[contains(@class,'Nnq7C weEfm')])[1]

Рабочее решение вашей проблемы

 element= WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//body//div[contains(@class,'_2z6nI')]//div//div//div[1]//div[1]//a[1]//div[1]//div[2]")))
        driver.execute_script("arguments[0].click()", element)

Выход:

enter image description here

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