我正在使用Selenium及其Python绑定到LinkedIn的webscrape进行研究项目。我webscrape人的个人资料。
在LinkedIn中,当您加载个人资料时,该网站会放置旋转圈,直到体验和教育完全加载为止。 我希望Selenium等到旋转圆圈消失,以便在HTML源代码中获得体验和教育部分。
所以我的问题是:我如何编写明确的等待LinkedIn旋转圈?
编辑:一个更精确的问题是:我如何获得旋转圈的定位器? 没有时间从浏览器开发工具那里做到这一点。它们消失得太快
编辑2:另一点。一个人可能有也可能没有教育部分。因此,点击或以其他方式检查教育部分是否存在不是解决方案。教育部门可能不存在,因为没有教育部分(该人没有在LinkedIn上放置任何信息,因此没有在DOM中放置教育部分)或者因为它尚未加载(有一个旋转圈子) )。我想知道它是哪一个。如果这是第二个原因(有旋转圈),我想等。 (该部分是div
,其中包含一个名为education-section
的类。这同样适用于经验
以下是该问题的核心项目。
这是类中的2个函数。 self.getBrowser()
返回一个WebDriver对象。为了清楚和简洁起见,我已经删除了非有趣的部分,包括2个函数中的代码,因此在现实中似乎没有使用的参数是。我希望剩下的变量是自我解释的。
def waitForPresenceCondition(self, by, value, sleep = True, check_for_404 = True):
try:
condition = EC.visibility_of_element_located((by, value))
WebDriverWait(self.getBrowser(), self.wait_timeout).until(condition)
except TimeoutException:
logging.critical("Timed out waiting for page element. Fatal. Exiting")
raise
except:
logging.error("Unexpected exception waiting for page element. Exiting")
raise
else:
logging.debug("Element found in URL")
# Scrape an organization
def scrape(self, url):
self.getBrowser().get(url)
try:
self.waitForPresenceCondition(By.CLASS_NAME, "pv-profile-wrapper")
except Error404:
logging.info("waitForPresenceCondition raised 404 error. Returning False")
return False
#INSERT HERE EXPLICIT WAIT FOR THE SPINNING CIRCLES
答案 0 :(得分:2)
纺车有一个名为artdeco-spinner
我通过在Chrome DevTools
中插入断点找到了它关注this指南并在“动画”事件中插入断点
然后根据@Andersson的建议,我使用了Selenium invisibility_of_element_located
函数,该函数等待locator
不可见或不再附加到DOM。我不需要区分这两种情况
def waitForInvisibility(self, by, value):
condition_str = "(" + str(by) + "," + value + ")"
url = self.getBrowserURL()
msg = "Waiting for in-visibility of "
msg += condition_str
msg += " in URL='" + url + "'"
logging.info(msg)
try:
condition = EC.invisibility_of_element_located((by, value))
WebDriverWait(self.getBrowser(), self.wait_timeout).until(condition)
except TimeoutException:
logging.critical("Timed out waiting for element invisibility. Exiting")
raise
except:
logging.error("Unexpected exception waiting for element invisibility. Exiting")
raise
else:
logging.debug("Element " + condition_str + " is now invisible in URL='" + url + "'")
答案 1 :(得分:1)
您可以更新以下代码:
def waitForPresenceCondition(self, by, value, sleep=True, check_for_404=True, visible=True):
try:
if visible:
condition = EC.visibility_of_element_located((by, value))
else:
condition = EC.invisibility_of_element_located((by, value))
WebDriverWait(self.getBrowser(), self.wait_timeout).until(condition)
这应该允许您使用waitForPresenceCondition()
visible=False
参数来等待div
旋转圆圈消失