【发布时间】:2020-03-27 09:37:43
【问题描述】:
我对网络抓取非常陌生,并且一直在尝试使用 Selenium 的功能来模拟访问德克萨斯州公共合同网页的浏览器,然后下载嵌入式 PDF。该网站是这样的:http://www.txsmartbuy.com/sp。
到目前为止,我已经成功地使用 Selenium 在下拉菜单“机构名称”之一中选择了一个选项,然后单击了搜索按钮。我在下面列出了我的 Python 代码。
import os
os.chdir("/Users/fsouza/Desktop") #Setting up directory
from bs4 import BeautifulSoup #Downloading pertinent Python packages
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
chromedriver = "/Users/fsouza/Desktop/chromedriver" #Setting up Chrome driver
driver = webdriver.Chrome(executable_path=chromedriver)
driver.get("http://www.txsmartbuy.com/sp")
delay = 3 #Seconds
WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, "//select[@id='agency-name-filter']/option[69]")))
health = driver.find_element_by_xpath("//select[@id='agency-name-filter']/option[68]")
health.click()
search = driver.find_element_by_id("spBtnSearch")
search.click()
一旦我进入结果页面,我就卡住了。
首先,我无法使用 html 页面源访问任何生成的链接。但是,如果我在 Chrome 中手动检查单个链接,我确实会找到与单个结果相关的相关标签 (<a href...)。我猜这是因为 JavaScript 渲染的内容。
第二,即使 Selenium 能够看到这些单独的标签,它们也没有 class 或 id。我认为调用它们的最佳方法是按显示的顺序调用<a 标签(参见下面的代码),但这也不起作用。相反,该链接调用了其他一些“可见”标签(页脚中的东西,我不需要)。
第三,假设这些事情确实有效,我怎样才能计算出页面上显示的<a> 标签的数量(以便为每个结果循环此代码)?
driver.execute_script("document.getElementsByTagName('a')[27].click()")
感谢您对此的关注——考虑到我才刚刚开始,请原谅我的任何愚蠢行为。
【问题讨论】:
标签: python selenium-webdriver web-scraping webdriverwait window-handles