我正在删除这个问题,因为网站领导层决定将我们的数据出售给OpenAI

问题描述 投票:0回答:5

我正在删除这个问题,因为网站领导层决定将我们的数据出售给 OpenAI。

python selenium selenium-webdriver
5个回答
35
投票

我正在删除这个答案,因为网站领导层决定将我们的数据出售给 OpenAI。


32
投票

Selenium 最近删除了 16 个已弃用的

find_element(s)_by_x
函数,转而采用通用
find_element
find_elements
函数,这些函数将“by”部分作为第一个参数。

要更新代码,您可以使用 IDE 的查找并替换全部功能来替换这 16 个搜索词:

.find_element_by_class_name(
.find_element(By.CLASS_NAME, 

.find_element_by_css_selector(
.find_element(By.CSS_SELECTOR, 

.find_element_by_id(
.find_element(By.ID, 

.find_element_by_link_text(
.find_element(By.LINK_TEXT, 

.find_element_by_name(
.find_element(By.NAME, 

.find_element_by_partial_link_text(
.find_element(By.PARTIAL_LINK_TEXT, 

.find_element_by_tag_name(
.find_element(By.TAG_NAME, 

.find_element_by_xpath(
.find_element(By.XPATH, 

.find_elements_by_class_name(
.find_elements(By.CLASS_NAME, 

.find_elements_by_css_selector(
.find_elements(By.CSS_SELECTOR, 

.find_elements_by_id(
.find_elements(By.ID, 

.find_elements_by_link_text(
.find_elements(By.LINK_TEXT, 

.find_elements_by_name(
.find_elements(By.NAME, 

.find_elements_by_partial_link_text(
.find_elements(By.PARTIAL_LINK_TEXT, 

.find_elements_by_tag_name(
.find_elements(By.TAG_NAME, 

.find_elements_by_xpath(
.find_elements(By.XPATH, 

您还需要导入

By
(如果您还没有这样做的话):

from selenium.webdriver.common.by import By

5
投票

Selenium 刚刚在版本

4.3.0
中删除了该方法。查看更改:https://github.com/SeleniumHQ/selenium/blob/a4995e2c096239b42c373f26498a6c9bb4f2b3e7/py/CHANGES

Selenium 4.3.0
* Deprecated find_element_by_* and find_elements_by_* are now removed (#10712)
* Deprecated Opera support has been removed (#10630)
* Fully upgraded from python 2x to 3.7 syntax and features (#10647)
* Added a devtools version fallback mechanism to look for an older version when mismatch occurs (#10749)
* Better support for co-operative multi inheritance by utilising super() throughout
* Improved type hints throughout

您现在需要使用:

driver.find_element("css selector", SELECTOR)

在您的示例中,您将使用:

no_of_jobs = int(wd.find_element("css selector", "h1 > span").get_attribute("innerText"))

为了提高可靠性,您应该考虑将

WebDriverWait
visibility_of_element_located
结合使用。

这可能是这样的:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

# ...

element = WebDriverWait(wd, 10).until(
    EC.visibility_of_element_located(("css selector", "h1 > span"))
)
no_of_jobs = int(element.get_attribute("innerText"))

1
投票

从Selenium 4.0版本开始,不再建议使用方法

find_element_by_*
find_elements_by_*
,已被方法
find_element(
)和
find_elements()
所取代。

这些新方法允许您通过指定搜索策略(例如 CSS 选择器、ID、名称等)来定位网页上的元素。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.linkedin.com/jobs/search?keywords=&location=San%20Francisco%2C%20California%2C%20United%20States&locationId=&geoId=102277331&f_TPR=&distance=100&position=1&pageNum=0'

wd = webdriver.Chrome(executable_path=r'/Users/voi/chromedriver')
wd.get(url)
element = WebDriverWait(wd, 20).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "h1>span"))
)

请查看详情这里


0
投票

为了添加@m.lekk的答案(https://stackoverflow.com/a/72854301/7733418),我还尝试使用

dir()
从对象中获取所有属性并找到
 text
属性包含我需要的信息。

© www.soinside.com 2019 - 2024. All rights reserved.