我正在尝试抓取一个像文件目录这样的网站。我想跟踪所有链接(嵌套文件夹的数量未知),直到到达.xml和.pdf文件,然后下载。
硒似乎是最好的选择,因为此站点需要登录,然后再将代码发送到电话应用程序以进行登录。我已经能够使用Web驱动程序登录。
此刻,我的代码仅导航到文件树的第一个“结束节点”。我不确定如何返回并浏览所有链接。有任何想法吗?到目前为止,这是我的代码...
browser.get(start_url)
def crawler():
links = browser.find_elements_by_xpath('//pre/a')
for link in links:
if '.xml' in link.text or '.pdf' in link.text:
print(f'download {link.text}') # This is a placeholder for now
else:
print('click')
browser.get(browser.current_url + link.text)
return crawler()
答案 0 :(得分:0)
browser.get(start_url)
def crawler():
links = browser.find_elements_by_xpath('//pre/a')
for link in links:
if '.xml' in link.text or '.pdf' in link.text:
print(f'download {link.text}') # This is a placeholder for now
else:
print('click')
browser.get(browser.current_url + link.text)
crawler()
根据评论,这是我用来等待Selenium中刷新的代码。请注意,它被编写为类的一部分,因此它使用self.driver等。BTW self.get_tags只是对提供的标签执行find_elements_by_tag_name的函数(使用大多数页面使用的“ html”)。
from contextlib import contextmanager
from selenium.webdriver.support.expected_conditions import staleness_of
@contextmanager
def wait_for_page_load(self, timeout=MAX_WAIT, entity='wait_for_page_load'):
""" Wait for a new page that isn't the old page
"""
old_page = self.get_tags(self.driver, 'html', entity)
yield
webdriver.support.ui.WebDriverWait(self.driver, timeout).until(
staleness_of(old_page[0]))
示例通话:
with self.wait_for_page_load():
logout.click()