我正在尝试创建一个脚本来只显示singapore poke map上的皮卡丘,剩下的代码是检查元素,获取它的坐标,并打印列表。我尝试了很长时间,我在这里看到的许多建议,但仍然无法使复选框设置为最新的代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
def find_pokemon():
links = []
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get('https://sgpokemap.com/index.html?fbclid=IwAR2p_93Ll6K9b923VlyfaiTglgeog4uWHOsQksvzQejxo2fkOj4JN_t-MN8')
driver.find_element(By.ID, 'filter_link').click()
driver.find_element(By.ID, 'deselect_all_btn').click()
driver.find_element(By.ID, 'search_pokemon').send_keys("pika")
driver.switch_to.frame(driver.find_elements(By.ID, "filter"))
driver.find_element(By.ID, 'checkbox_25').click()
代码的第二部分在放置断点并忽略复选框click()异常后手动选中复选框时正常工作。
你有什么建议我可以试试吗?
附加问题,我如何确定并关闭捐赠视图:
2条答案
按热度按时间piok6c0g1#
您的代码存在以下几个问题:
1.没有ID为'search_pokemon'的元素
1.那里没有可切换到它的帧。
1.您需要使用
WebDriverWait
expected_conditions
来等待可单击的元素。1.一般来说,你需要学习如何创建正确的定位器。
下面的代码是有效的:
结果是:
统一采购司
1.这次我看到了捐赠对话框,所以我添加了关闭它的机制。
1.我仍然看不到你提到的
ID = 'search_pokemon'
元素。1.关于XPath找到相关的复选框-当口袋妖怪的名字被插入时,你可以在开发工具中看到有很多复选框,但是它们都是不可见的,而在我们的例子中只有一个是可见的。不可见的元素都有
style="display: none;"
属性,而启用的元素没有style
属性。这就是为什么[not(@style)]
出现在那里。所以,我正在寻找父元素//div[@class='filter_checkbox']
谁也没有style
属性。在XPath的话//div[@class='filter_checkbox'][not(@style)]
然后我只是寻找它label
子点击它。这也可以用CSS选择器以及。包含启用元素的不可见元素列表:
axr492tv2#
在@Prophet的帮助和答案下,爬行Map并获取所有皮卡丘坐标的当前代码如下:
虽然还有很多...奇怪的:()
wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'pokemon_icon_img')))
,因为它并不总是立刻显示图标,要么这样,要么添加一个常量
时间延迟。
saveToKeep(res)
方法是我用来打开google keep notes并将结果写入google keep notes的一个简单方法,需要在google安全设置中获得一个应用密码,我用它和我的google账户凭证一起登录。欢迎任何意见或改进意见:D