如何点击div元素显示 selenium 或BeautifulSoup4隐藏的数据?

gojuced7  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(143)

我必须从描述底部的页面中抓取数据,我的目标是获得左下角蓝色方块中描述的电话号码,但电话号码不是很明显,只有单击后才会完全显示。
我用Selenium测试,但没有结果,它返回NoSuchElementException错误

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

s = Service('home/Downloads/chromedriver')
driver = webdriver.Chrome(service=s)
driver.get("https://bina.az/items/3141057")
time.sleep(5)
button = driver.find_element(By.CLASS_NAME,"show-phones js-show-phones active")
ohtdti5x

ohtdti5x1#

这里有几个问题:
1.您试图单击的元素不在可视屏幕中。因此,您首先需要滚动屏幕才能访问它。

  1. show-phonesjs-show-phonesactive3个类名称。如果要使用所有这3个值,则应使用CSS_SELECTOR而不是CLASS_NAME,但由于show-phones足以创建唯一定位器,因此可以将其与CLASS_NAME一起单独使用。
    1.应使用显式等待,而不是硬编码休眠time.sleep(5)WebDriverWaitexpected_conditions
    下面的代码是有效的:
import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(service=webdriver_service, options=options)

wait = WebDriverWait(driver, 20)
actions = ActionChains(driver)

url = "https://bina.az/items/3141057"
driver.get(url)


element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "show-phones")))
driver.execute_script("arguments[0].scrollIntoView();", element)
time.sleep(0.5)
element.click()

结果是

相关问题