【问题标题】:Can't deselect a already selected blank space using selenium无法使用 selenium 取消选择已选择的空白区域
【发布时间】:2018-01-30 19:12:36
【问题描述】:

我已经在 python 中结合 selenium 编写了一些代码,以到达我所追求的数据所在的目标页面。我下面的代码几乎可以到达那里。我只需要稍微抽动一下,就可以让它完美运行。

首先,浏览器会导向一个页面,其中默认的Login 按钮位于Public User Login 标题下,然后它会单击该按钮。当出现新页面时,它会单击位于该页面顶部Account Search 标题下的Advanced 选项卡。单击该选项卡后,在Parcel Classification 的标题下可以看到一个项目列表。现在,我需要从选项中选择02.C - PROPERTY BURDENED BY CONSERVATION EASEMENTS 并按下搜索按钮。就是这样。

我的刮刀可以相应地完成整个事情,但问题是:当它选择首选选项时(我在上面提到过文本),默认情况下还有另一个选项(这些选项的第一个空格)保持选中状态.这就是为什么当我的爬虫点击搜索按钮时,它会填充错误的结果(没有结果的页面)。

如何取消选择第一个空白并继续其余部分。提前感谢您查看它。

该网页的链接:Web_Link

这是我迄今为止尝试过的:

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("replace_with_above_link")

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#middle_left input[name='submit']"))).click()
wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Advanced"))).click()
Select(wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".tableHtmlLayout #accountTypeID")))).select_by_visible_text('02.C - PROPERTY BURDENED BY CONSERVATION EASEMENTS')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".buttons input[type='submit']"))).click()
driver.quit()

【问题讨论】:

  • 你能分享相同的 HTML 代码示例吗?提供的 URL(至少对我而言)不可访问...
  • 好的,先生。我在等你。将提供一个指向带有该部分的 html 元素的 Dropbox 的链接。
  • 链接到下拉选项的 html 元素:Click_to_see

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

如果我对问题的理解正确,您想在选择目标选项之前取消选择第一个选项吗?做这样的事情怎么样?

wait.until(EC.presence_of_element_located((By.LINK_TEXT, "Advanced"))).click()
account_selector = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".tableHtmlLayout #accountTypeID")))
Select(account_selector).deselect_by_index(0)
Select(account_selector).select_by_visible_text('02.C - PROPERTY BURDENED BY CONSERVATION EASEMENTS')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".buttons input[type='submit']"))).click()

【讨论】:

  • 感谢@Breaks Software,为您提供解决方案。这看起来不错的样子。测试完成后尽快给您反馈。
  • 不可能,它就像魔术一样。请编辑索引号以使其成为0 而不是1。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多