我用 python 结合 selenium 编写了一个脚本来登录一个站点,然后将 cookie 传输到 ,driver以便requests我可以继续使用它requests来进行进一步的活动。
我用item = soup.select_one("div[class^='gravatar-wrapper-']").get("title")这一行来检查脚本是否可以在一切完成后获取我的用户名。
这是我到目前为止的尝试:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
url = "https://stackoverflow.com/users/login"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_css_selector("#email").send_keys("your_username")
driver.find_element_by_css_selector("#password").send_keys("your_password")
driver.find_element_by_css_selector("#submit-button").click()
driver_cookies = driver.get_cookies()
c = {c['name']:c['value'] for c in driver_cookies}
res = requests.get(driver.current_url,cookies=c)
soup = BeautifulSoup(res.text,"lxml")
item = soup.select_one("div[class^='gravatar-wrapper-']").get("title")
print(item)
driver.quit()
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,它找不到用户名并给出 None 作为输出。
如何在使用 selenium 登录后在selenium和之间传递 cookierequests以便进行抓取?requests
我试图解压缩一些我在get_item()函数中产生的列表。我知道如果使用return而不是可以得到理想的结果yield。
我试过了:
def get_item():
yield ["k","y","t"]
if __name__ == '__main__':
for item in get_item():
print(item)
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
['k', 'y', 't']
Run Code Online (Sandbox Code Playgroud)
我想得到的输出:
k
y
t
Run Code Online (Sandbox Code Playgroud)
我应该带来什么可能的改变以保持预期的结果yield?
keep/discard通过python selenium chromedriver下载文件时,如何摆脱此通知?
我尝试了以下方法,但无法成功:
chromeOptions = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
chromeOptions.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)
Run Code Online (Sandbox Code Playgroud)
编辑:看来我发现了另一个网站,该网站具有这样的“ .eml”文件,该文件在单击以结尾的链接时会引发相同的通知.eml。
我正在尝试以下方法:
from selenium import webdriver
url = "https://www.online-convert.com/file-format/eml"
dirf = r"C:\Users\WCS\Desktop\emlfolder"
def download_file(link):
driver.get(link)
driver.find_element_by_css_selector("a[href$='example.eml']").click()
if __name__ == '__main__':
chromeOptions = webdriver.ChromeOptions()
prefs = {'download.default_directory' : dirf}
chromeOptions.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chromeOptions)
download_file(url)
Run Code Online (Sandbox Code Playgroud)
通知完全类似于下图:
顺便说一句,我开始单击该链接进行下载只是因为我正在尝试的站点没有任何真实的URL连接到该“ .eml”文件来进行导航。事实证明,导航到该“ .eml”链接也会导致相同的通知。
python selenium web-scraping python-3.x selenium-chromedriver
我已经使用请求模块和 BeautifulSoup 库创建了一个脚本来从网页中获取一些表格内容。要生成表格,必须手动执行我在所附图像中显示的步骤。我在下面粘贴的代码是一个有效的代码,但我试图解决的主要问题是以title编程方式获取数字,在这种情况下628086906,它附加到table_link我在这里硬编码的 。
单击工具按钮后 - 在第 6 步中 - 当您将光标悬停在地图上时,您可以看到此选项Multiple,当您单击该选项时,会将您带到包含标题编号的 url。
这正是脚本所遵循的步骤。
这是0030278592第 6 步中需要在输入框中输入的 linc 编号。
我已经尝试过(因为我在 中使用了硬编码的标题编号而工作table_link):
import requests
from bs4 import BeautifulSoup
link = 'https://alta.registries.gov.ab.ca/spinii/logon.aspx'
lnotice = 'https://alta.registries.gov.ab.ca/spinii/legalnotice.aspx'
search_page = 'https://alta.registries.gov.ab.ca/SpinII/SearchSelectType.aspx'
map_page = 'http://alta.registries.gov.ab.ca/SpinII/mapindex.aspx'
map_find = 'http://alta.registries.gov.ab.ca/SpinII/mapfinds.aspx'
table_link = 'https://alta.registries.gov.ab.ca/SpinII/popupTitleSearch.aspx?title=628086906'
def get_content(s,link):
r = s.get(link)
soup = BeautifulSoup(r.text,"lxml")
payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
payload['uctrlLogon:cmdLogonGuest.x'] = '80'
payload['uctrlLogon:cmdLogonGuest.y'] = '20' …Run Code Online (Sandbox Code Playgroud) 我创建了一个脚本,使用 python 结合 selenium 在其中实现代理登录到 Facebook 并抓取其帖子位于我的提要顶部的用户的名称。我希望脚本在无限时间内每五分钟执行一次。
由于这种连续登录可能会导致我的帐户被禁止,我想在脚本中实现代理以匿名完成所有工作。
到目前为止我已经写过:
import random
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_first_user(random_proxy):
options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" : 2}
options.add_experimental_option("prefs",prefs)
options.add_argument(f'--proxy-server={random_proxy}')
with webdriver.Chrome(options=options) as driver:
wait = WebDriverWait(driver,10)
driver.get("https://www.facebook.com/")
driver.find_element_by_id("email").send_keys("username")
driver.find_element_by_id("pass").send_keys("password",Keys.RETURN)
user = wait.until(EC.presence_of_element_located((By.XPATH,"//h4[@id][@class][./span[./a]]/span/a"))).text
return user
if __name__ == '__main__':
proxies = [`list of proxies`]
while True:
random_proxy = proxies.pop(random.randrange(len(proxies)))
print(get_first_user(random_proxy))
time.sleep(60000*5)
Run Code Online (Sandbox Code Playgroud)
在从需要身份验证的站点连续抓取数据时如何保持不被发现?