This 搜索 给出结果,并且存在多个 PIN 码。我只需要捕获类中的第一个元素。
法典:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import re
import pandas as pd
import os
import html5lib
import json
import time
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
from selenium.webdriver.common.keys import Keys
url = "https://www.google.com/"
chromedriver = r"C:Usersmechromedriver"
driver = webdriver.Chrome(chromedriver)
driver.implicitly_wait(30)
driver.get(url)
search = driver.find_element_by_name('q')
search.send_keys("newyork pincode")
search.send_keys(Keys.RETURN)
time.sleep(5)
driver.quit()
您可以使用css selector
或xpath
来实现。
css 选择器*推荐
div.IAznY div.title
Xpath
//div[@class="IAznY"]//div[@class="title"]
添加WebDriverWait
而不是time.sleep(..)
以提高效率。
首先,您需要以下导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
注:find_element_by_*
始终返回第一个元素,即使有许多元素具有相同的定位器也是如此。
因此,您可以使用以下代码:
search = driver.find_element_by_name('q')
search.send_keys("newyork pincode")
search.send_keys(Keys.RETURN)
element = WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, 'div.IAznY div.title')))
print(element.text)
但是,如果您需要像您所说的那样处理multiple
并且您不想使用第一个元素,那么您可以使用.find_elements_by_*
.下面的代码是获取第二个元素的示例:
elements = WebDriverWait(driver, 10).until(expected_conditions.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div.IAznY div.title')))
print(elements[1].text)
这是索引[1]
,在WebDriverWait
实现中可以看到第一个代码和第二个代码的区别,即visibility_of_element_located
和visibility_of_all_elements_located
诱导WebDriverWait
并遵循 css 选择器来标识元素。
elements=WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div.mlo-c div.title')))
print(elements[0].text)
在控制台上打印:
10001
您需要导入以下内容来执行上述代码。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
找到名为h998We mlo-c
的类并获取第一个元素将为您提供第一个 PIN 码。
find_element_by_class_name('h998We mlo-c')
,它将返回您之前询问的任何城市(例如德里(的所有密码,然后在div
内获取文本以获取Pincode
https://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_element_by_class_name