#python #selenium #onclick #click
#python #selenium #onclick #нажмите
Вопрос:
Я работаю над созданием платформы автоматизации с использованием Selenium в Python, где я пытаюсь перебирать целевые страницы на HubSpot.com нажав на кнопку «Далее».
Следующая кнопка находится в следующем HTML-файле в соответствии с инспектором Chrome:
<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0">
<span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span>
<span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span>
</a>
И я нажимаю на кнопку, используя следующий код Python:
time.sleep(3)
wait(self.driver, """//a[@class="next" and not(@disabled)]""")
nextButton = self.driver.find_element(By.XPATH, """//a[@class="next" and not(@disabled)]""")
hov = ActionChains(self.driver).move_to_element(nextButton)
hov.click().perform()
где моя функция wait () определяется как:
def wait(dr, x):
element = WebDriverWait(dr, 5).until(
EC.presence_of_element_located((By.XPATH, x))
)
return element
Это отлично работает на первой странице. Но по какой-то причине, когда я добираюсь до второй страницы, он не может нажать кнопку. Никаких ошибок, он просто начинает делать то, что должен, на третьей странице, но на второй странице. Кроме того, если я остановлю скрипт непосредственно перед тем, как он должен нажать на кнопку Далее на второй странице, я увижу, что кнопка выделена в Chromedriver.
Следующая кнопка расположена в следующем HTML-файле на странице 2 в соответствии с инспектором Chrome::
<a class="next" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0">
<span data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.1">Next</span>
<span class="right" data-reactid=".0.1.0.0.2.1.0.0.1.0.$next.0.2"></span>
</a>
Есть предложения? У меня нет идей.
Комментарии:
1. Это внезапно начнет работать, если вы добавите режим ожидания между 1-м и 2-м щелчком мыши?
2. Я полагаю, вы используете этот код два раза (по одному разу на страницу), верно?:) Почему вы используете
ActionChains
вместо простогоclick()
?3. @LeviNoecker: у меня уже есть сон между щелчками. К сожалению, это ничего не меняет.
4. @Andersson: Я также пробовал использовать метод щелчка. Никаких изменений.
5. Попробуйте использовать
element_to_be_clickable
вместоpresence_of_element_located
aselement = WebDriverWait(dr, 5).until(EC.element_to_be_clickable((By.XPATH, x)))
и дайте мне знать.
Ответ №1:
Мне удалось найти обходной путь. Вместо того, чтобы пытаться нажать кнопку далее, я нажимаю соответствующую кнопку страницы. Для начала я определяю j =2, а затем использую следующий код:
if self.driver.find_elements(By.XPATH, """//a[@class="next" and not(@disabled)]""") != 0:
xpathstring = """//div[@class="hs-pagination"]/ul/li/a[text()="%s"]""" % (j)
waitclick(self.driver, xpathstring)
nextButton = self.driver.find_element(By.XPATH, xpathstring)
hov = ActionChains(self.driver).move_to_element(nextButton)
hov.click().perform()
time.sleep(3)
j = j 1
Я до сих пор не понимаю, почему первое решение не работает, но это рабочее решение для щелчка по разбивке на страницы.