即使在Selenium Python中使用Explicit - WebDriverWait也无法获得元素的全文



我是编码新手,第一次使用stackoverflow。想知道如果我可以在这里得到帮助。

我正试着刮总no。在这个链接上给出的工作。https://jobs.bestbuy.com/bby?id=all_jobs&温泉= 1,s = req_id_num

下面是我的代码。

import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
os.environ['PATH'] += "/Users/monicayadav/PycharmProjects/pythonProject4/selenium/venv/bin"
driver = webdriver.Firefox()
driver.implicitly_wait(30)

driver.get('https://jobs.bestbuy.com/bby?id=all_jobs&spa=1&s=req_id_num')
wait = WebDriverWait(driver, 10)
JobCountBESTBUY = wait.until(ec.presence_of_element_located((By.XPATH, "//p[contains(@class, 'font-wt-500 ng-binding')]"))).text
print(JobCountBESTBUY)

输出

jobs found
Process finished with exit code 0

我得到的只是"找到了工作"因此,我需要这个数字而不是1925

解决方案1 -更简单的

使用time.sleep(seconds)等待页面完全加载结果。就像下面这样。别忘了import time

import time
# ... Removed code for simplicity ...
driver.get('https://jobs.bestbuy.com/bby?id=all_jobs&spa=1&s=req_id_num')
time.sleep(10)
wait = WebDriverWait(driver, 10)
JobCountBESTBUY = wait.until(ec.presence_of_element_located((By.XPATH, "//p[contains(@class, 'font-wt-500 ng-binding')]"))).text
print(JobCountBESTBUY)

解决方案2 -更快的

另一方面,即使文本已经准备好,time.sleep花费太多时间等待。另一种方法是寻找如下文本本身。优点是一旦找到匹配,等待就结束了,可以直接返回数字。

import re
# ... Removed code for simplicity ...
driver.get('https://jobs.bestbuy.com/bby?id=all_jobs&spa=1&s=req_id_num')
WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.XPATH, "//p[contains(@class, 'font-wt-500 ng-binding')]")))
# Matches `1,234`, `1`, `12`, `1,234,567`
r = re.compile(r'^([0-9,]+).*$')
JobCountBESTBUY = WebDriverWait(driver, 10).until(
lambda _: (e := driver.find_element(By.XPATH, "//p[contains(@class, 'font-wt-500 ng-binding')]")) 
and (m := r.match(e.text)) 
and m.group(1)
)
print(JobCountBESTBUY)

1,988

最新更新