راکت

web scraping with python

13 پاسخ

@websaz
@mohaligateway
@samanzdev
@rezajahangir
@Rp76
@juza66
من میخوام در یک سایت لاگین کنم اما نمیدونم چطوری در پایتون با کتابخانه Beautiful Soup
بگم که روی button کلیک کن
میشه راهنمایی کنید به چه شکلی میشه

ثبت پرسش جدید

پاسخ‌ها

13
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

من پایتون بلد نیستم
c# میتونم اینکارو کنم + php

عرفان
عرفان
@erf

تخصص: Python

سلام
از کتابخانه selenium استفاده کنید

شاید پاسخ شما همین‌جا باشد

ftp
ftp
@ftp

تخصص: ساده

@ErfanSadeqiNejad
من با این گنتبخانه میخوام انجام بدم
Beautiful Soup و requests

[N] ONE
[N] ONE
@none

تخصص: هرچی باشه

اول باید ببینید API سایت چطور کار میکنه و به چه چیزی نیاز دارید
اگر captcha داره باید ببینید راهی برای bypass هست یا نه!
صفحه وب داینامیک هست یا استاتیک!
بعد از این موارد میتوانید ببینید که از چه نوع متود request ی استفاده کنید راحت تر هستید و انجام شدنی ه!
حال از BeautifulSoup میتونید به شکل زیر استفاده کنید:

URL = 'https://www.test.test/jobs/search/?user=test&password=xxxx'
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')

نمونه کد بالا HTTP Request با متود Get هستش

login_url = 'http://test.test/login'
data = {
    'username': 'your_username',
    'password': 'your_password'
}

with requests.Session() as s:
    response = requests.post(login_url , data)
    print(response.text)
    index_page= s.get('http://test.test')
    soup = BeautifulSoup(index_page.text, 'html.parser')
    print(soup.title)

و این نمونه کد نیز برای متود post

ولی چیزی که شما سوال دارید مغایر با موارد بالاس
شما باید از headless web browser ها استفاده کنید تا کاری که میخواید رو انجام بدید
اگر میخواهید با پایتون account checker بسازید میتونم نمونه زیر رو بهتون پیشنهاد بدم که با requests پیاده سازی شده
Simple Checker By Python
*همینطور اگر هدفتون دریافت یه سری اطلاعات باشه هم از این روش میتونید ساتفاده کنید!

ftp
ftp
@ftp

تخصص: ساده

@none
راستیتش من میخوام این صفحه رو لاگین کنم
https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/
میشه راهنمایی کنید

[N] ONE
[N] ONE
@none

تخصص: هرچی باشه

@ftp
توی این سایت لاگین به صورت دو مرحله ای صورت میگیره
اول شماره یا نام کاربری وارد میشه:
url:https://www.digikala.com/users/login-register
method:post
data:
rc:randomstringinform
rd:randomstringinform
yourusername:login[emailphone]

بعد این مرحله به صفحه ای redirect میشی با url:
https://www.digikala.com/users/login/confirm/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Ijk4OTM4MjEzNzIzNyJ9.P76oezeSbzwNahjQAFofUkx4ceDT48aXU8Q9PoLu0&type=loginbypassword&back=https://www.digikala.com/
که token هر دفعه تغییر میکنه پس باید این url رو دریافت کنی بعد باید با متود post اطلاعات زیر رو براش بفرستی:
rc:tokenfromform
rd:tokenfromform
login[password]:yourpassword

توضیحات:
rc و rd دو ورودی پنهان در form هستن که باید ارسال بشن و توی هر مرحله متفاوت ان!
برای انجامش اول باید یه صفحه برای login باز کنی و بعد rdوrc رو بگیری ازش و user مورد نظر رو هم وارد کنی و بفرستی url اول بعد url دوم و پارامتر های rcوrd بگیری بفرستی url دوم!(هر دو متود post)
تمام!
نیازی به headless web browser نیست
با دو تا curl و post request تمومه لاگین شدن!

ساده است و خوشبختانه captcha نداره 😏

یه چندبار با postman امتحان کن دستت میاد بعد برو توی پایتون پیاده اش کن

علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

بهترین پاسخ رو @none دادند ...

ftp
ftp
@ftp

تخصص: ساده

@ErfanSadeqiNejad
@none
چند تا نکته
۱- چطوری خودش میره به صفحه پسورد ؟
۲- توکن که هر دفعه تغییر میکنه رو چطوری باید گرفت؟
من از این کد ایتفاده کردم برای صفحه اول اما به صفحه دوم نمیره

from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"n@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params,headers={"Referer":"https://digikala.com/"})
soup=BeautifulSoup(req1.content,"html.parser")
res=soup.find_all(attrs={"name":["rc","rd"]})
res1=soup.find('button',class_=['o-btn o-btn--contained-red-lg c-login__form-action'])
num=[]
for each in res:
print(each['value'])
num.append(each['value'])
print(num)  
print(res1)
ftp
ftp
@ftp

تخصص: ساده

@none
میشه بگید چطوری روی دکمه کلیک کنم و بعدش به صفحه بعدی برم

[N] ONE
[N] ONE
@none

تخصص: هرچی باشه

@ftp
😐😐😐
شما یه درخواست post میفرسید که یه response داره دیگه
اون response توی header هاش ادرس url جدید رو داره و داخل body ه میاد rc و rd رو داره که پس از دریافت باید از url استفاده کنید و rcوrdوpass رو ارسال کنید بعد لاگین انجام میشه!
اصلا توی ارسال post کلیدی وجود نداره و نیاز ندارید!
شما ابتدا نیاز دارید با مفهوم request و طرز کار API ها و ساختار سایت ها آشنابشید!

ftp
ftp
@ftp

تخصص: ساده

@none
خوب مشکل من همینه الان من این کد رو میزنم دوباره همون صفحه رو در خروجی چاپ میکنه در header هم location یا url وجود نداره

from bs4 import BeautifulSoup
import re
import requests as req
params={"login[email_phone]":"netwons@gmail.com"}
url="https://www.digikala.com/users/login-register/?_back=https://www.digikala.com/"
req1=req.post(url,data=params)
print(req1.text)
print(req1.headers)
[N] ONE
[N] ONE
@none

تخصص: هرچی باشه

@ftp
چون اصلا درست نیست کاری که انجام دادید!
ابتدا باید یم بار صفحه رو لود کنید و rc و rd رو بگیرید و همراه با email به همون url بفرستید!
بعد تو url ی که بر میگردونه هم همین کارو کنید!

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام