python - 如何通过在 selenium 中搜索找到 div 元素,然后使用 selenium 和 python 从该 div 复制属性?
问题描述
我想要做的是从 html 中的 div(元素)获取 asin(属性),然后与 amazon.com/dp/ + asin 连接以形成一个 URL,然后访问该 URL。div 没有 id,但由 div 元素中的 data-index="1" 属性标识,所以我想知道如何调用此 div 元素,然后专门搜索 asin 属性。谢谢阅读。使用 python 3.7 和 selenium webdriver
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
email = ('.')
password = ('.')
query = ('macbook')
urls = []
prices = []
names = []
descs = []
def search_amazon(query):
driver.get('https://amazon.com/')
searchBox = driver.find_element_by_id('twotabsearchtextbox')
time.sleep(2)
searchBox.send_keys(query)
searchBox.send_keys(Keys.ENTER)
time.sleep(3)
firstResult = driver.find_element_by_name('data-index="1"')
asin = firstResult.getAttribute('data-asin')
print(asin)
url = 'https://amazon.com/dp/' + asin
driver.get(url)
print(url)
return url
search_amazon(query)
解决方案
您需要使用我提供的代码更改这两行代码。
firstResult = driver.find_element_by_name('data-index="1"')
asin = firstResult.getAttribute('data-asin')
由于data-index
不是名称,它是一个属性。您可以使用以下css选择器。
firstResult = driver.find_element_by_css_selector('div[data-index="1"]>div')
asin = firstResult.get_attribute('data-asin')
这是工作代码。
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
email = ('.')
password = ('.')
query = ('macbook')
urls = []
prices = []
names = []
descs = []
def search_amazon(query):
driver.get('https://amazon.com/')
searchBox = driver.find_element_by_id('twotabsearchtextbox')
time.sleep(2)
searchBox.send_keys(query)
searchBox.send_keys(Keys.ENTER)
time.sleep(3)
firstResult = driver.find_element_by_css_selector('div[data-index="1"]>div')
asin = firstResult.get_attribute('data-asin')
print(asin)
url = 'https://amazon.com/dp/' + asin
driver.get(url)
print(url)
return url
search_amazon(query)
推荐阅读
- express - 如何通过使源代码对人类不可读来保护 Express 应用程序?
- windows - schtasks.exe:任务计划程序无法从 XML 创建任务
- laravel - 如何在 Laravel 5 中通过急切加载仅检索一条记录?
- visual-studio-code - 键盘访问 Visual Studio Code 状态栏
- angularjs - 在表格上应用排序时如何更改范围变量?
- pyspark - Pyspark:获取时间窗口之间的行数
- python - 如何在 Python 类型提示中表达多重继承?
- javascript - 如何在 Ejabberd 中启用基于角色的用户聊天
- javascript - 通过字符串键访问对象返回任何
- azure - 从 Azure CDN 访问受 IP 限制的 Azure Web 应用程序 - 哪些 IP 范围应列入白名单?