将会话ID从Selenium传递到Python请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将会话ID从Selenium传递到Python请求相关的知识,希望对你有一定的参考价值。

100%Python noob,所以如果我使用的任何术语或短语不正确或含糊不清,我会道歉

我试图去一个随机的单词生成器网站,刷新默认生成的随机单词,刷新后抓取网站,摄取单词,按字母顺序排序,然后将预先排序和后排序的列表打印到屏幕。

这是网址url:https://www.randomlists.com/random-words

我使用的是最新版本的Python 3.x,它附带了Requests,我使用Pip安装了Selenium。

这是我能够成功做到的:

  1. 使用Selenium将刷新命令传递给网站并生成新的单词列表
  2. 使用请求从网站上删除默认字词。
  3. 按字母顺序对默认单词列表排序
  4. 将预先排序和后排序的默认单词列表打印到屏幕

以下是我不想做的事情:

  1. 使用Selenium从默认值刷新网站
  2. 然后使用请求从网站上删除刷新的单词
  3. 然后按字母顺序排序并打印到屏幕上,进行预排序和后排序。

我发现其原因是Selenium和Requests都使用自己的“实例”,由网站的会话ID表示。

所以(最后)这里是我的问题 - 我如何将从Selenium刷新的网站中捕获的会话ID传递给Requests,然后我用它来刷新刷新的单词列表而不是默认的单词列表?

围绕这个问题的所有主题都涉及将用户名和密码登录会话从一个传递到另一个,这不是我在这里要做的。如果已经提出这个问题我很抱歉 - 我今天花了几个小时进行研究,但是无法找到任何与我的具体情况有关的内容。

如果有必要,非常乐意发布我当前代码的副本。

谢谢!

编辑以在下面添加代码

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument("--test-type")
options.binary_location = "/usr/bin/chromium"
driver = webdriver.Chrome(executable_path=r"REDACTED")
url = 'https://www.randomlists.com/random-words'
driver.get(url)

refresh_button = driver.find_elements_by_xpath("//input[@name='submit' and 
@value='Refresh']")[0]
refresh_button.click()

rawList = []
sortedList= []
url = 'https://www.randomlists.com/random-words'
r = requests.get(url)
tree = lxml.html.fromstring(r.content)
elements = tree.get_element_by_id('result')
for el in elements:
    rawList.append(el.text_content())

print("This is the unsorted list:", "
")
for i in rawList:
    print(i)

print("
")
print("This is the sorted list:", "
")
for i in rawList:
    sortedList.append(i)
sortedList.sort()
for i in sortedList:
    print(i)
答案

我试图去一个随机的单词生成器网站,刷新默认生成的随机单词,刷新后抓取网站,摄取单词,按字母顺序排序,然后将预先排序和后排序的列表打印到屏幕。

我不确定这是一个任务还是其他什么,必须以这种特定方式完成,但可能有一种更简单的方法。看看该网站上的请求,我找到了他们似乎从中随机选择的所有单词的JSON链接。现在,它们似乎没有排序,但就像在返回的数据上调用sorted(...)一样简单。

>>> import requests
... 
... url = 'https://www.randomlists.com/data/words.json'
... r = requests.get(url)
... r.raise_for_status()
... all_words = r.json()['data']
>>> len(all_words)
2643
>>> all_words == sorted(all_words)
False
>>> sorted_words = sorted(all_words)

以上是关于将会话ID从Selenium传递到Python请求的主要内容,如果未能解决你的问题,请参考以下文章

从过滤器重定向到 JSP 时传递属性:会话与请求

Selenium 4.x Grid 1/4

Python + MySQL。如何将字段的 ID 从 ComboBox 传递到数据库?

如何通过邮递员中的cookie传递会话ID并登录?

[Selenium自动化测试学习]Python+Selenium环境搭建

Python - 请求,Selenium - 在登录时传递 cookie