from selenium import webdriver
import time
import win32clipboard
import win32api
import win32con
from selenium.webdriver.common.action_chains import ActionChains
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName],0,0,0)
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0)
VK_CODE={'enter':0x0D,'down_arrow':0x28}
url2='https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E5%8A%A8%E6%BC%AB&step_word=&hs=0&pn=1&spn=0&di=49500&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=1680238894%2C752784316&os=1456076808%2C2964036578&simid=4162351635%2C532680339&adpicid=0&lpn=0&ln=1219&fr=&fmq=1462357247335_R&fm=&ic=0&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201709%2F07%2F20170907142921_VEUnJ.thumb.700_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fn2_z%26e3Bxtvt_z%26e3BgjpAzdH3FtvijAzdH3F14w-mccdmmc_z%26e3Bip4s&gsm=1&rpstart=0&rpnum=0&islist=&querylist=&force=undefined'
browser= webdriver.Chrome(executable_path=r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
browser.maximize_window()
browser.get(url2)
time.sleep(2)
path='E:\\'
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(path)
win32clipboard.CloseClipboard()
img=browser.find_element_by_xpath('//*[@id="currentImg"]')
action = ActionChains(browser).move_to_element(img)
action.context_click(img).perform()
time.sleep(1)
win32api.keybd_event(86,0,0,0)
time.sleep(1)
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x0D,0,0,0)
win32api.keybd_event(0x12, 0, 0, 0)
win32api.keybd_event(0x53, 0, 0, 0)
win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x12, 0, win32con.KEYEVENTF_KEYUP, 0)
keyDown('enter')
keyUp('enter')
time.sleep(1)
print('over')
直接用现成的不想吗... https://www.jianshu.com/p/ade4c6fc9c55 代码有些错误,改了一下 import requests import re import time import os import urllib.parse from lxml import html import json page_num=30 photo_dir=r"F:\Documents\Python" # 设置目录 etree = html.etree def getDetailImage(word): num=0 url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={0}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word={0}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={1}&rn="+str(page_num)+"&gsm=1e&1552975216767=" while num<50: page_url=url.format(urllib.parse.quote(word),num*page_num) print(page_url) response=requests.get(page_url) regex = re.compile(r'\\(?![/u"])') json_data=json.loads(regex.sub(r"\\\\", response.text))#问题在于编码中是\xa0之类的,当遇到有些 不用转义的\http之类的,则会出现以上错误 for item in json_data['data']: params={ "word":word, "di":item['di'], "tn":"baiduimagedetail", "cs":item['cs'], "os":item['os'], } detail_url="http://image.baidu.com/search/detail" response=requests.get(detail_url,params=params) selector = etree.HTML(response.text) pic_url=selector.xpath("//img[@id='hdFirstImgObj']/@src")[0] print(pic_url) name=pic_url.split('/')[-1] headers={ "Referer":page_url, } html=requests.get(pic_url,headers=headers) with open(os.path.join(word_dir,name[-8:]),'wb')as f: f.write(html.content) num=num+1 if __name__ == "__main__": word = input("请输入搜索关键词(可以是人名,地名等): ") word_dir=os.path.join(photo_dir,word) if not os.path.exists(word_dir): os.mkdir(word_dir) getDetailImage(word)
你写得太复杂了吧...模拟点击... 你参考一下下面这个问题吧 你不要求换文件夹就可以解决... https://biwen.csdn.net/question/4761
你好,麻烦你用最简单的方式重写这个程序
这段程序是我写的吧?
我这里测试正常,文件保存在了E盘。改个路径也测试正常
你现在那边还有什么问题?保存的路径不对吗?
确定 没有使用鼠标干扰吧?我这里保存窗口一闪而过。
确定
非得使用右键菜单保存吗?上次的单击自动下载到某一个目录不行吗?
你这个截图是弹出保存窗口 脚本就停止了吗?
@Angel OvO 他的需求是希望使用右键菜单 来实现保存 保存的时候 可以自定义保存路径。。
浴火_凤凰你好,如果有其他方法存储图片也可以
据angel提供的东西跑了一下,出现如下:SyntaxError: unexpected EOF while parsing
不要求右键 只是保存的话 方法就多了
浴火_凤凰你好,麻烦你选一个最简单的 写一下
下面的代码量是最少的 也支持配置保存的目录位置
#导入webdriver from selenium import webdriver options = webdriver.ChromeOptions() prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'E:\\'} options.add_experimental_option('prefs', prefs) browser = webdriver.Chrome(executable_path=r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',chrome_options=options) #最大化浏览器窗口 browser.maximize_window() #打开目标网站 url2='https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E5%8A%A8%E6%BC%AB&step_word=&hs=0&pn=1&spn=0&di=49500&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=1680238894%2C752784316&os=1456076808%2C2964036578&simid=4162351635%2C532680339&adpicid=0&lpn=0&ln=1219&fr=&fmq=1462357247335_R&fm=&ic=0&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201709%2F07%2F20170907142921_VEUnJ.thumb.700_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fn2_z%26e3Bxtvt_z%26e3BgjpAzdH3FtvijAzdH3F14w-mccdmmc_z%26e3Bip4s&gsm=1&rpstart=0&rpnum=0&islist=&querylist=&force=undefined' browser.get(url2) browser.find_element_by_css_selector("#toolbar > span.bar-btn.btn-download").click()
'download.default_directory': 'E:\\' #修改这里改保存目录位置
浴火凤凰你好,CSS选择这里括号里的内容的写法你能不能详细注释一下,我是个新手,不懂这个,我要举一反三,应该是修改这里吧,
要是这行用xpath写可以吗
可以 既然你熟悉XPath 就给你一个XPath写法:
browser.find_element_by_xpath('//*[@id="toolbar"]/span[7]').click()
toolar在哪,找半天没找到
网页底部的工具栏就是toolbar
括号里的内容是粘贴进去的还是手动写
看起来比我想象的难
你说说原理吧,实在是蒙了
我的建议是:
使用浏览器自带的功能获取,然后自己再修改
因为获取的有时候 不是很准确。
具体操作看下面的截图
你找一下find_element_by_xpath 是什么函数 不就明白了吗
浴火凤凰 你好,有的网站并没有‘下载‘这个钮,我想应该要换个方式吧
你也没说要脚本 通用。。
等会儿 我再换个方法
我现在说一下:要求脚本通用
#导入webdriver from selenium import webdriver import requests browser = webdriver.Chrome(executable_path=r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe') #最大化浏览器窗口 browser.maximize_window() #打开目标网站 url2='https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E5%8A%A8%E6%BC%AB&step_word=&hs=0&pn=1&spn=0&di=49500&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=1680238894%2C752784316&os=1456076808%2C2964036578&simid=4162351635%2C532680339&adpicid=0&lpn=0&ln=1219&fr=&fmq=1462357247335_R&fm=&ic=0&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201709%2F07%2F20170907142921_VEUnJ.thumb.700_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fn2_z%26e3Bxtvt_z%26e3BgjpAzdH3FtvijAzdH3F14w-mccdmmc_z%26e3Bip4s&gsm=1&rpstart=0&rpnum=0&islist=&querylist=&force=undefined' browser.get(url2) # browser.find_element_by_css_selector("#toolbar > span.bar-btn.btn-download").click() src=browser.find_element_by_xpath('//*[@id="currentImg"]').get_attribute("src") name=src.split('/')[-1] response = requests.get(src) path1="E:\\"+name with open(path1, 'wb')as f: f.write(response.content) print("文件保存成功!") # browser.quit()
上面 如果想保存什么图片 改 '//*[@id="currentImg"]'这部分内容
下面附上 无需打开浏览器就能保存图片的版本
from bs4 import BeautifulSoup import requests url2='https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E9%AB%98%E6%B8%85%E5%8A%A8%E6%BC%AB&step_word=&hs=0&pn=1&spn=0&di=49500&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=2&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=-1&cs=1680238894%2C752784316&os=1456076808%2C2964036578&simid=4162351635%2C532680339&adpicid=0&lpn=0&ln=1219&fr=&fmq=1462357247335_R&fm=&ic=0&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=&height=&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201709%2F07%2F20170907142921_VEUnJ.thumb.700_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fn2_z%26e3Bxtvt_z%26e3BgjpAzdH3FtvijAzdH3F14w-mccdmmc_z%26e3Bip4s&gsm=1&rpstart=0&rpnum=0&islist=&querylist=&force=undefined' response = requests.get(url2) soup=BeautifulSoup(response.text,"html.parser") src=soup.find(id= "currentImg").attrs["src"] name=src.split('/')[-1] response = requests.get(src) path1="E:\\"+name with open(path1, 'wb')as f: f.write(response.content) print("文件保存成功!")
上面 如果想保存什么图片 改 id= "currentImg"这部分内容
13.jpg是什么
哪个网址的 哪个图片 发出来看看
哪个网址的 哪个图片
我在我这里试试
?还在试验吗?
大哥?还有什么问题?
我给了3套方案 ,不会都有问题吧?
有问题就说,没问题,等着结贴呢。。。
哥们,第一套方案就有问题,我已经说过了,实在不想说第二遍,
第二 第三套 方案呢?
全不行
我也是醉了。。。我给了三个方案 我这全都可以,你那全都不行。
也算是奇迹了。
有时间发这些消息不如想想怎么解决问题
你这个东西不想老想着自己能不能用
我说三个都能用 你说都不能用
最公平的方法就是找个第三方来评判一下吧。。。
咱俩在这扯半天也没用。。