gpt4 book ai didi

python - 无法从每次单击时激活的类似容器的盒子中解析信息

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:20 25 4
gpt4 key购买 nike

我用 python 结合 selenium 编写了一个脚本来解析网页中的一些信息。该网页上几乎没有商店名称及其链接。如果我点击任何链接,就会弹出一个包含信息的卡片状框。我的目的是单击每个链接并解析该卡中的信息。但是,当我执行脚本时,它确实单击每个链接,并且每次单击都会弹出一个类似盒子的容器,但我无法从中解析信息。看起来我已经定义了正确的选择器,但仍然没有运气。

这是该主题的后续问题:Click Here

以下脚本中使用的链接:The link

这是完整的代码:

from selenium import webdriver ; import time
from selenium.webdriver.common.by import By
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("use above link")

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "#store-locator-iframe")))

while True:
try:
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#addresses_list li a:not(.directions-link)"))):
driver.execute_script('arguments[0].scrollIntoView();', item)
item.click()
time.sleep(4)
except:
break

for elem in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".gm-style-iw .gm_popup"))):
name = elem.find_element_by_class_name("gm_name").text
phone = elem.find_element_by_class_name("gm_phone").text
print(name,phone)

driver.quit()

选择器内的元素存在:

<div class="gm-style-iw" style="top: 9px; position: absolute; left: 15px; width: 353px;"><div style="display: inline-block; overflow: auto; max-height: 529px; max-width: 330px;"><div style="overflow: auto;"><div class="gm_popup"><div class="gm_name">Adel Outfitters</div><div class="gm_address">1221 W 4th St</div><div class="gm_location">Adel, Georgia 31620<div style="display:none" class="w3-address-country">United States</div></div><div class="gm_phone"><span class="gm_phone_label">P:</span> 229-896-7105</div><div class="gm_email">adeloutfitters@yahoo.com<div><div class="gm_website"><a href="https://www.facebook.com/pages/adel-outfitters/132735763434461" target="_blank">https://www.facebook.com/pages/Adel-Outfitters/132735763434461</a></div><br><a target="_blank" class="directions-link" href="http://maps.google.com/?saddr=+&amp;daddr=1221+W 4th St, Adel, Georgia, 31620">Directions<span class="w3-arrow">➲</span></a></div></div></div></div></div><div style="border-top: 1px solid rgb(204, 204, 204); margin-top: 9px; padding: 6px; visibility: hidden; font-size: 13px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-family: Roboto, Arial; display: none;"><a href="" target="_blank" style="cursor: pointer; color: rgb(66, 127, 237); text-decoration: none;">View on Google Maps</a></div></div>

最佳答案

看来您应该在单击链接时在同一循环中移动用于解析每个文本框的代码:

while True:
try:
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#addresses_list li a:not(.directions-link)"))):
driver.execute_script('arguments[0].scrollIntoView();', item)
item.click()
try:
wait.until(EC.staleness_of(driver.find_element_by_class_name("gm_name")))
except:
pass
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".gm-style-iw .gm_popup")))
name = elem.find_element_by_class_name("gm_name").text
phone = elem.find_element_by_class_name("gm_phone").text
print(name, phone)
except:
break

关于python - 无法从每次单击时激活的类似容器的盒子中解析信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com