经过一番尝试,我似乎已经弄清楚问题出在哪里了。错误
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“method”:“xpath”,“selector”:“//button[@class =”pv-profile-section__card-action-bar pv-skills-section__additional-skills artdeco-container-card-action-bar artdeco-button artdeco-button--tertiary artdeco-button--3 artdeco-button--fluid"]"}
(会话信息:chrome=81.0.4044.113)
总是正确地陈述它遇到的问题,因此它无法找到该元素。造成这种情况的可能原因包括:
就你而言,这是第二点。当您向下滚动时,显示的内容会动态加载。因此,当它第一次加载您的个人资料时,技能部分实际上并不存在于 DOM 中。因此,要解决此问题,您只需滚动到该部分,以便将其应用到 DOM 中。
这条线就是这里的技巧。它将把它定位到正确的面板,从而加载数据并将其应用到 DOM。
driver.execute_script("window.scrollTo(0, 1800)")
这是我的代码(请根据需要进行更改)
from time import sleep
# import parameters
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
ChromeOptions = webdriver.ChromeOptions()
driver = webdriver.Chrome('../chromedriver.exe')
driver.get('https://www.linkedin.com/login?fromSignIn=true&trk=guest_homepage-basic_nav-header-signin')
sleep(0.5)
username = driver.find_element_by_name('session_key')
username.send_keys('')
sleep(0.5)
password = driver.find_element_by_name('session_password')
password.send_keys('')
sleep(0.5)
sign_in_button = driver.find_element_by_xpath('//button[@class="btn__primary--large from__button--floating"]')
sign_in_button.click()
driver.get('https://www.linkedin.com/in/kate-yun-yi-wang-054977127/?originalSubdomain=hk')
sleep(3)
# driver.execute_script("window.scrollTo(0, 1800)")
sleep(3)
loadmore_skills=driver.find_element_by_xpath('//button[@class="pv-profile-section__card-action-bar pv-skills-section__additional-skills artdeco-container-card-action-bar artdeco-button artdeco-button--tertiary artdeco-button--3 artdeco-button--fluid"]')
actions = ActionChains(driver)
actions.move_to_element(loadmore_skills).perform()
#actions.move_to_element_with_offset(loadmore_skills, 0, 0).perform()
loadmore_skills.click()
Output
Update
对于您的新问题,您需要实现一种连续滚动方法,该方法使您能够动态更新skills
部分。这需要大量的改变,并且最好应该作为另一个问题来提出。
我还找到了一个简单的解决方案,将滚动设置为正确的阈值。为了y=3200
似乎适用于我检查过的所有配置文件,包括你的、我的和其他一些配置文件。
driver.execute_script("window.scrollTo(0, 3200)")