Не удается найти элемент в селене. XPath, css селекторы, все перепробовал - PullRequest
0 голосов
/ 15 января 2019

Impressions
<div class="ellipsis _1ha3" data-hover="tooltip" data-tooltip-display="overflow" data-tooltip-text-direction="auto">11,483</div>

Clicks

<div class="ellipsis _1ha3" data-hover="tooltip" data-tooltip-display="overflow" data-tooltip-text-direction="auto">379</div>

Я сейчас застрял. Я запускаю два одинаковых кода для извлечения метрик из менеджера объявлений fb, и хотя верхний код работает нормально, второй код (тот, который пытается найти клики) не может найти элемент, который я ищу. Я пробовал xpath, css_selectors, все, и до сих пор не могу понять, почему я не могу найти этот элемент. Любая помощь будет оценена. Спасибо!

Впечатления

impressions = browser.find_element_by_xpath('//*[@id="ads_pe_container"]/div[2]/div[2]/div[4]/div/div/div/div/div[2]/div/div/div[1]/div[1]/div/div[2]/div/div/div[1]/div[4]/div/div/div[2]/div/div[5]/div/div/div/div[1]')
impressions_text = impressions.text
impressions_attribute_value = impressions.get_attribute('value')
impressions = ('{0}'.format(impressions_text))
print(impressions)

1011 * Щелчки * clicks = browser.find_element_by_xpath('//*[@id="ads_pe_container"]/div[2]/div[2]/div[4]/div/div/div/div/div[2]/div/div/div[1]/div/div/div[2]/div/div/div[1]/div[4]/div/div/div[2]/div/div[7]/div/div/div/div[1]') clicks_text = clicks.text clicks_attribute_value = clicks.get_attribute('value') clicks = ('{0}'.format(clicks_text)) print(clicks) Я ожидаю, что #click вернет число, как #impressions, но оно не может найти элемент. Я даже пытался переключать кадры безрезультатно. #Impressions находится в окне DOM, так что это не проблема. Любая помощь будет оценена. копия элемента # кликов

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Переменная для вхождения должна быть помещена после полного xpath:

xpath('(//div[contains(@class, "ellipsis _1ha3")])[x]')

или

xpath( ' (//div[@class='ellipsis _1ha3'])[x]')

Вы можете попробовать xpath в консоли Chrome, как указано ниже:

$x("(//div[contains(@class,'ellipsis _1ha3')])[x]")

Если имя класса должно совпадать точно:

$x("(//div[@class='ellipsis _1ha3'])[x]")
0 голосов
/ 15 января 2019

Вы должны всегда пытаться обрезать селекторы, сделать их максимально тонкими.

в качестве селектора вы должны использовать:

Этот селектор будет точно соответствовать className:

xpath('//div[@class="ellipsis _1ha3"][x]')

или

Этот селектор будет соответствовать классу элементов, в котором он содержит эти символы:

xpath('//div[contains(@class, "ellipsis _1ha3")][x]')
  • x - позиция найденных элементов dom, начинается с 1, ([1] выберет первый случай и т. Д.).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...