Нажмите на ссылку, используя селен вебдрайвер

1

Я пытаюсь нажать на ссылку и не могу заставить ее работать. Я нажимаю полностью на нужную мне страницу, но потом не нажимает последнюю ссылку. Код выглядит следующим образом:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
import requests

import pandas as pd
import openpyxl
from password import DKpassword
#import SendKeys

beginningTime = time.time()
browser = webdriver.Chrome()
browser.get('https://www.draftkings.com/lobby')
browser.maximize_window()
time.sleep(5)
signinLink = browser.find_element_by_xpath("""//*[@id="react-mobile-home"]/section/section[2]/div[2]/div[3]/div/input""")
signinLink.click()
signinLink.send_keys("abcdefg")
signinLink.send_keys(Keys.TAB)
passwordLink = browser.find_element_by_xpath("""//*[@id="react-mobile-home"]/section/section[2]/div[2]/div[4]/div/input""")
passwordLink.send_keys(DKpassword)
passwordLink.send_keys(Keys.ENTER)
time.sleep(5)

if browser.current_url == "https://www.draftkings.com/account/sitelogin/false?returnurl=%2Flobby1":
    signin = browser.find_element_by_partial_link_text("SIGN IN")
    signin.click()
elif browser.current_url == "https://www.draftkings.com/lobby#/featured":

    mlbLink = browser.find_element_by_partial_link_text("MLB")
    mlbLink.click()
else:
    print("error")

time.sleep(5)
featuredGame = browser.find_element_by_class_name("GameSetTile_tag")
featuredGame.click()
time.sleep(5)
firstContest = browser.find_element_by_partial_link_text("Enter")
firstContest.click()

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

Изображение 174551 Изображение 174551

Теги:
selenium
webdriver

3 ответа

2
Лучший ответ

Для этого может быть несколько причин.

1. Возможно, вам придется прокручивать вниз или, возможно, выполнить какое-либо действие, чтобы оно было видимым для скрипта.

для прокрутки вниз вы можете использовать этот код:

browser.execute_script("window.scrollTo(0, Y)")

где Y - высота (на полноэкранном мониторе 1080)

2. Может присутствовать несколько веб-элементов, в этом случае вам нужно использовать уникальный элемент из dom, вы можете проверить, что щелкнув правой кнопкой мыши> проверите> в разделе раздела> CTRL + F> напишите свой локатор (в вашем случае xpath), чтобы проверьте количество записей.

Вы также можете попробовать с этим xpath:

//a[contains(text(),'Enter') and contains(@href,'/contest/draftteam') and contains(@class,'dk-btn-dark')]  

Код:

WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//a[contains(text(),'Enter') and contains(@href,'/contest/draftteam') and contains(@class,'dk-btn-dark')]"))

firstContest = browser.find_element_by_xpath("//a[contains(text(),'Enter') and contains(@href,'/contest/draftteam') and contains(@class,'dk-btn-dark')]")
firstContest.click()
  • 1
    Я все еще изучаю Python, но я должен был сам разобраться в ошибке !! Сначала я использовал метод прокрутки вниз и нашел другую ссылку, которая содержала «Enter», поэтому он пытался щелкнуть по нему, но, конечно, он не был визуальным, поэтому он выдавал ту ошибку, что на нее нельзя было нажать. Как только я понял это, я использовал // a для поиска / draftteam, и тогда он работал отлично. Спасибо за вашу помощь!
  • 0
    @ShawnSchreier: нет проблем, приятель.
1

Замените событие click классом действий, который решит это исключение

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
actions.move_to_element(firstContest).click().perform()
0

Я смог преодолеть это исключение, используя Click via JavaScript executor вместо обычного Element.click(), поскольку below-

WebElement element = webDriver.findElement(By.xpath(webElemXpath));
try {

    JavascriptExecutor ex = (JavascriptExecutor) webDriver;
    ex.executeScript("arguments[0].click();", element);
    logger.info(elementName was + " clicked");
} 
catch (NoSuchElementException | TimeoutException e) {
logger.error(e.getMessage());

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню