我正在解析一个动态站点(selenium-wire,bs4)。问题是脚本需要找到按钮并单击它,以便页面进一步滚动并加载内容。
目前我尝试了不同的选择,但它们都是某种“拐杖”
这是我最新的工作版本
try:
while self.driver.find_element(By.CSS_SELECTOR, '.event__more--static'):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
self.driver.find_element(By.CSS_SELECTOR, '.event__more--static').click()
time.sleep(3)
except:
print('Вы на дне!')
问题是我无法消除延迟,然后代码崩溃,因为找不到该元素(因为新的“显示更多”按钮尚未加载)。而且代码重复也很混乱。
试图通过硒方法等待页面上的元素
def takeContent(self):
"""Забирает контент со страницы"""
while True:
try:
self.element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.event__more--static'))
)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print(f'Я ИЩУ КНОПКУ - {self.element}')
self.element.click()
except:
print('Вы на дне!')
break
此代码根本无法工作。第一次单击按钮后,浏览器将关闭,仅此而已。
基于添加到此代码的评论
def takeContent(self):
"""Забирает контент со страницы"""
try:
while True:
button = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.event__more--static')))
print('Я нашёл кнопку - ', button)
self.driver.execute_script("arguments[0].click();", button)
print('Я нажал кнопку - ', button)
except:
print('Вы на дне!')
self.content = self.driver.page_source
现在的问题是:
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нажал кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нажал кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
他只需单击一个按钮即可发送垃圾邮件。而且网站一直在旋转加载,无法加载任何额外的“屏幕”。是否有可能以某种方式编写代码来等待内容加载?
使用 CSS 选择器进行加载。
首先等待它出现 WebDriverWait().until
然后等待它消失 WebDriverWait().until_not 继续使用页面。
最好将这两个等待包装在一个 try-except 中,以防加载根本没有出现
(或者对那些应该加载的元素执行 WebDriverWait,例如,检查它们的可点击性或视觉显示)
浏览器在某个时刻重新加载页面,我会使用 WebDriverWait