如何使用seleniumpython单击特定按钮

2024-09-26 04:56:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究纽约时报的迷你纵横字谜(https://www.nytimes.com/crosswords/game/mini)。你知道吗

首先,当页面加载时,我需要单击“确定”按钮(我这样做了)

然后从右边的菜单中选择“显示”然后选择“拼图”,但是按钮本身并没有特定的ID,如下面所示。你知道吗

<div class="Toolbar-expandedMenu--2s4M4"> <li class="Tool-button--39W4J Tool-tool--Fiz94 Tool-texty--2w4Br"><button>clear</button> <ul class="HelpMenu-menu--1Z_OA"> <li class="HelpMenu-item--1xl0_" style="display:list-item" title="Won’t clear letters that are part of completed crossing words"><a>Incomplete</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Word</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Puzzle</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Puzzle &amp; Timer</a></li> </ul> </li> <li class="Tool-button--39W4J Tool-tool--Fiz94 Tool-texty--2w4Br Tool-open--1Moaq"><button>reveal</button> <ul class="HelpMenu-menu--1Z_OA"> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Square</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Word</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Puzzle</a></li> </ul> </li> <li class="Tool-button--39W4J Tool-tool--Fiz94 Tool-texty--2w4Br"><button>check</button> <ul class="HelpMenu-menu--1Z_OA"> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Autocheck</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Square</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Word</a></li> <li class="HelpMenu-item--1xl0_" style="display:list-item"><a>Puzzle</a></li> </ul> </li> </div>

这是我的python脚本

from selenium import webdriver
import time

driver_path = "/home/xperia/PycharmProjects/cs461-getinput/chromedriver"
browser = webdriver.Chrome(executable_path=driver_path)
browser.get("https://www.nytimes.com/crosswords/game/mini")
time.sleep(5)
browser.find_element_by_class_name("buttons-modalButton--1REsR").click()
time.sleep(5)
browser.find_element_by_class_name("Tool-button--39W4J Tool-tool--Fiz94 Tool-texty--2w4Br").click()

Tags: browserstyledisplaybuttonlitoolitemul
3条回答

您可以使用元素的文本而不是ID来单击元素。在您的情况下,这可能会有所帮助,因为元素没有ID

单击“显示”按钮:

# wait for reveal button to exist
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,'//button[contains(text(), 'reveal')]'))).click()

# click reveal button
browser.find_element_by_xpath("//button[contains(text(), 'reveal')]").click()

要单击拼图,可以使用以下路径:

# wait for puzzle button to exist
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,'//li[button[contains(text(), 'reveal')]]/ul/li/a[text()='Puzzle']'))).click()

# click the reveal button
browser.find_element_by_xpath("//li[button[contains(text(), 'reveal')]]/ul/li/a[text()='Puzzle']").click()

我把你的剧本编辑了一点。我测试了我的这一方面,它的工作点按下'拼图'按钮。我也建议使用xpath。您可以通过单击inspect获得xpath元素,直到元素的位置弹出,然后右键单击并通过xpath复制。这就是代码的样子

from selenium import webdriver
import time

driver_path = "/home/xperia/PycharmProjects/cs461-getinput/chromedriver"
browser = webdriver.Chrome(executable_path=driver_path)
time.sleep(3)
browser.find_element_by_class_name("buttons-modalButton 1REsR").click()
time.sleep(2)
browser.find_element_by_xpath('//*[@id="root"]/div/div/div[4]/div/main/div[2]/div/div/ul/div[2]/li[2]/button').click()
browser.find_element_by_xpath('//*[@id="root"]/div/div/div[4]/div/main/div[2]/div/div/ul/div[2]/li[2]/ul/li[3]/a').click()

同样重要的是要注意,如果你得到一个错误,可能是因为有另一个元素阻止了你想要点击的按钮。你知道吗

单击“显示”菜单下的“拼图”可归纳WebDriverWaitelement_to_be_clickable()

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver_path = "/home/xperia/PycharmProjects/cs461-getinput/chromedriver"
browser = webdriver.Chrome(executable_path=driver_path)
browser.get("https://www.nytimes.com/crosswords/game/mini")
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,'//span[text()="ACCEPT AND CLOSE"]'))).click()
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.CLASS_NAME,'buttons-modalButton 1REsR'))).click()
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,'//div[@class="Toolbar-expandedMenu 2s4M4"]//li/button[text()="reveal"]'))).click()
WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH,'//button[text()="reveal"]/following::ul[1]//li/a[text()="Puzzle"]'))).click()

相关问题 更多 >