我是编码新手,第一次使用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