Eri*_*hoi 28 python selenium xpath css-selectors webdriverwait
我正在尝试从网站复制 href 值,html 代码如下所示:
<p class="sc-eYdvao kvdWiq">
<a href="https://www.iproperty.com.my/property/setia-eco-park/sale-
1653165/">Shah Alam Setia Eco Park, Setia Eco Park
</a>
</p>
Run Code Online (Sandbox Code Playgroud)
我试过了,driver.find_elements_by_css_selector(".sc-eYdvao.kvdWiq").get_attribute("href")但它回来了'list' object has no attribute 'get_attribute'。使用driver.find_element_by_css_selector(".sc-eYdvao.kvdWiq").get_attribute("href")返回的None. 但是我不能使用 xpath,因为该网站有 20+ 个 href,我需要全部复制。使用 xpath 只会复制一个。
如果有帮助,所有 20 多个 href 都归入同一类,即sc-eYdvao kvdWiq.
最终,我想复制所有 20+ 个 href 并将它们导出到 csv 文件。
感谢任何可能的帮助。
QHa*_*arr 47
如果有多个元素,您需要 driver.find_elements。这将返回一个列表。对于 css 选择器,您要确保为那些具有子 href 的类选择
elems = driver.find_elements_by_css_selector(".sc-eYdvao.kvdWiq [href]")
links = [elem.get_attribute('href') for elem in elems]
Run Code Online (Sandbox Code Playgroud)
您可能还需要一个等待条件,以便 css 选择器定位的所有元素都存在。
elems = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".sc-eYdvao.kvdWiq [href]")))
Run Code Online (Sandbox Code Playgroud)
Deb*_*anB 11
根据给定的 HTML:
<p class="sc-eYdvao kvdWiq">
<a href="https://www.iproperty.com.my/property/setia-eco-park/sale-1653165/">Shah Alam Setia Eco Park, Setia Eco Park</a>
</p>
Run Code Online (Sandbox Code Playgroud)
由于href属性在<a>理想情况下位于标签内,因此您需要更深入地移动到<a>节点。因此,要提取href 属性的值,您可以使用以下任一定位器策略:
使用css_selector:
print(driver.find_element_by_css_selector("p.sc-eYdvao.kvdWiq > a").get_attribute('href'))
Run Code Online (Sandbox Code Playgroud)
使用xpath:
print(driver.find_element_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a").get_attribute('href'))
Run Code Online (Sandbox Code Playgroud)
如果要提取需要使用的href 属性的所有值find_elements*:
使用css_selector:
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_css_selector("p.sc-eYdvao.kvdWiq > a")])
Run Code Online (Sandbox Code Playgroud)
使用xpath:
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a")])
Run Code Online (Sandbox Code Playgroud)
但是,如果观察值的阶级属性,即sc-eYdvao与kvdWiq理想的是动态值。因此,为了提取href你有诱发属性WebDriverWait的visibility_of_element_located(),你可以使用以下的定位策略:
使用CSS_SELECTOR:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a"))).get_attribute('href'))
Run Code Online (Sandbox Code Playgroud)
使用XPATH:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a"))).get_attribute('href'))
Run Code Online (Sandbox Code Playgroud)
如果要提取href 属性的所有值,可以visibility_of_all_elements_located()改用:
使用CSS_SELECTOR:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a")))])
Run Code Online (Sandbox Code Playgroud)
使用XPATH:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a")))])
Run Code Online (Sandbox Code Playgroud)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53983 次 |
| 最近记录: |