【发布时间】:2020-04-04 16:55:56
【问题描述】:
我有一些 selenium-webdriver 的代码,如下所示:
base_url = 'http://wsprnet.org/drupal/wsprnet/spotquery'
driver = webdriver.Chrome()
driver.get(base_url)
并且在输入登录名和密码后,页面会在这段代码之后更新:
btn_elem_upd = driver.find_element_by_id('edit-submit').click()
接下来需要将更新后的页面转移到另一个函数中,像这样:
url = "Here need transfer the new updated page"
res = requests.get(url)
doc = lxml.html.fromstring(res.text)
如何做到这一点?有什么选择? 更新,如果我这样写,代码可以工作:
new_source = 'http://wsprnet.org/drupal/wsprnet/spots'
res = requests.get(new_source)
doc = lxml.html.fromstring(res.text)
cols = []
cols.append(doc.xpath('//table/tr[1]/node()/text()')[0])
for item in doc.xpath('//table/tr/th'):
typ = str(type(item.getnext()))
if not 'NoneType' in typ:
cols.append(item.getnext().text)
inf = []
for item in doc.xpath('//table//tr//td'):
inf.append(item.text.replace('\\xa02', '').strip())
rows = [inf[x:x+len(cols)] for x in range(0, len(inf), len(cols))]
with open("output.csv", "w", newline='') as f:
writer = csv.writer(f)
writer.writerow(cols)
for l in rows:
writer.writerow(l)
如果我重写:
doc = lxml.html.fromstring(driver.page_source)
cols = []
cols.append(doc.xpath('//table/tr[1]/node()/text()')[0])
代码无法正常工作并出现错误:
cols.append(doc.xpath('//table/tr[1]/node()/text()')[0])
IndexError: list index out of range
【问题讨论】:
-
登录后是要
URL吗? -
@TekNath 是的,但在登录 url = wsprnet.org/drupal/wsprnet/spotquery 之前和登录 url = wsprnet.org/drupal/wsprnet/spotquery 之后。但页面内容不同。
-
点击
submit按钮后,如果你使用driver.page_source,你会得到HTML。这就是你想要的? -
@KunduK 是的,我尝试这种方式。但是如果我写 url = driver.page_source ,下一行会抛出一个错误 - res = requests.get(url)。我需要重写代码以便下一个构造起作用: res = requests.get(url) doc = lxml.html.fromstring(res.text)
-
您可以在登录后发布您的 html 以及您所追求的价值吗?
标签: python selenium selenium-webdriver beautifulsoup python-requests