Я пытаюсь найти элемент в красной рамке ниже. Поскольку информация об этом конкретном элементе изменяется, я использую класс, выделенный выше class = "_2z6nI", чтобы сослаться на элемент, выделенный красным, поскольку местоположение этого класса и его отношение к элементу, который я пытаюсь нажать, остаются постоянными.
![enter image description here](https://i.stack.imgur.com/i5LBP.png)
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()