Я пытаюсь нажать на ссылку и не могу заставить ее работать. Я нажимаю полностью на нужную мне страницу, но потом не нажимает последнюю ссылку. Код выглядит следующим образом:
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()
Я получаю сообщение об ошибке, что элемент не кликается в точке... и другой элемент получит клик. Любая помощь будет принята с благодарностью. Меня не волнует, на какой конкурс нажимают, пока он находится на странице с расширенными функциями, которую также называет предыдущий код.
Для этого может быть несколько причин.
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()
Замените событие click классом действий, который решит это исключение
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
actions.move_to_element(firstContest).click().perform()
Я смог преодолеть это исключение, используя 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());
}