在 Selenium/Python 中尝试通过 xpath 查找所有符合特定条件的按钮,以便可以单击
In Selenium/Python trying to find all Buttons with that meet certain criteria by xpath so it can be clicked
Screenshot
我目前正在使用 Selenium 和 Python 创建一个脚本来帮助在网站上预订免费实习点,这样您就不必一直检查它。
所以我试图表达一个 xpath,它将引导 selenium 找到所有空闲点并单击“预订”按钮。
我的第一个问题是,您是否可以以某种方式缩短下面代码中的循环,这样它就不必一个一个地检查每个值,而只需找到所有按钮在文本属性中有 x as a value >=1
。 (text属性包含当前可用名额数量和总名额。
第二个问题 将是如何处理有空位的按钮,以便可以点击它们,并最终有望预订。首先,我尝试使用 selenium 遍历 html table 的每个单元格,以检查是否可以单击按钮和预订地点,但我认为这需要太多时间
browser.get('https://www.pj-portal.de/index_hro.php?PAGE_ID=101')
delay = 2
for x in range(1,20):
browser.find_elements_by_xpath(f"//*[contains(text(),'{x}/')]")
print("found")
Liste1 = browser.find_elements_by_xpath(f"//*[contains(text(),'{x}/')]")
print(len(Liste1))
Wunschbutton = browser.find_elements_by_xpath(//td[text()='1/3']/preceding-sibling::td[2])
Wunschbutton.click()
Screenshot of webpage
HTML 页面的一部分:
<td class="aktion verfuegbar buchungsphase border_links"
<img class="aktion_tertial_wunsch_setzen " data-
pj_traineeship_tertial_id="166037" data-
pj_general_traineeship_id="8487" data-changetype="24"
src="images/wunsch_setzen_button.svg" alt="+" title="Wunsch">
</td><img class="aktion_tertial_wunsch_setzen " data-
pj_traineeship_tertial_id="166037" data-
pj_general_traineeship_id="8487" data-changetype="24"
src="images/wunsch_setzen_button.svg" alt="+" title="Wunsch">
<td class="hinweise_leer verfuegbar buchungsphase "> </td>
<td class=" tertial_verfuegbarkeit verfuegbar buchungsphase
">1/3</td>
也许有人有想法。提前致谢!
我不知道你是怎么算出范围的
range(1,20):
提前。
为了回答您的第一个问题,我想说您可以从 xpath 缩小搜索范围。
像这样:
//*[starts-with(text(),'1/')]
现在使用此 XPath,您将确保您只查找第三列中具有 1/*
的行。
回答您的第二个问题我想您可以在row color
进行检查,如果它是红色的,则表示所有座位都可用或没有座位可用。 [取决于应用程序的设计]。需要更多上下文才能回答这部分。
Screenshot
我目前正在使用 Selenium 和 Python 创建一个脚本来帮助在网站上预订免费实习点,这样您就不必一直检查它。
所以我试图表达一个 xpath,它将引导 selenium 找到所有空闲点并单击“预订”按钮。
我的第一个问题是,您是否可以以某种方式缩短下面代码中的循环,这样它就不必一个一个地检查每个值,而只需找到所有按钮在文本属性中有 x as a value >=1
。 (text属性包含当前可用名额数量和总名额。
第二个问题 将是如何处理有空位的按钮,以便可以点击它们,并最终有望预订。首先,我尝试使用 selenium 遍历 html table 的每个单元格,以检查是否可以单击按钮和预订地点,但我认为这需要太多时间
browser.get('https://www.pj-portal.de/index_hro.php?PAGE_ID=101')
delay = 2
for x in range(1,20):
browser.find_elements_by_xpath(f"//*[contains(text(),'{x}/')]")
print("found")
Liste1 = browser.find_elements_by_xpath(f"//*[contains(text(),'{x}/')]")
print(len(Liste1))
Wunschbutton = browser.find_elements_by_xpath(//td[text()='1/3']/preceding-sibling::td[2])
Wunschbutton.click()
Screenshot of webpage
HTML 页面的一部分:
<td class="aktion verfuegbar buchungsphase border_links"
<img class="aktion_tertial_wunsch_setzen " data-
pj_traineeship_tertial_id="166037" data-
pj_general_traineeship_id="8487" data-changetype="24"
src="images/wunsch_setzen_button.svg" alt="+" title="Wunsch">
</td><img class="aktion_tertial_wunsch_setzen " data-
pj_traineeship_tertial_id="166037" data-
pj_general_traineeship_id="8487" data-changetype="24"
src="images/wunsch_setzen_button.svg" alt="+" title="Wunsch">
<td class="hinweise_leer verfuegbar buchungsphase "> </td>
<td class=" tertial_verfuegbarkeit verfuegbar buchungsphase
">1/3</td>
也许有人有想法。提前致谢!
我不知道你是怎么算出范围的
range(1,20):
提前。
为了回答您的第一个问题,我想说您可以从 xpath 缩小搜索范围。
像这样:
//*[starts-with(text(),'1/')]
现在使用此 XPath,您将确保您只查找第三列中具有 1/*
的行。
回答您的第二个问题我想您可以在row color
进行检查,如果它是红色的,则表示所有座位都可用或没有座位可用。 [取决于应用程序的设计]。需要更多上下文才能回答这部分。