At golangprograms.com you can learn the essentials of Go from the basic to advanced topics, along with various examples and solutions. It's the standard way to handle errors. Modifiers key. Default is devices.LaptopWithMDPIScreen . // useful when debugging with headless mode. all the methods of the returned page will use the ctx if they have IO blocking operations. // Here we update the request's header. You will use those coordinates to plot where the mouse need to move. Because alert will block js, usually you have to run the wait function in another goroutine. PagePool to thread-safely limit the number of pages at the same time. To see it in action visit the YouTube playlist. We use optional third-party analytics cookies to understand how you use GitHub.com so we can build better products. ElementX returns the first child that matches the XPath selector, Elements returns all elements that match the css selector, ElementsByJS returns the elements from the return value of the js, ElementsX returns all elements that match the XPath selector, Eval js on the page. Get a page from the pool. I had a case where I wanted the program to be usable for both me and my significant other — it was coded on a MacBook Pro 13", but had to be usable on Windows PCs with several full HD monitors. MustSetExtraHeaders is similar to SetExtraHeaders, MustSetUserAgent is similar to SetUserAgent, MustSetViewport is similar to SetViewport, MustStopLoading is similar to StopLoading, MustWaitNavigation is similar to WaitNavigation, MustWaitPauseOpen is similar to WaitPauseOpen, MustWaitRequestIdle is similar to WaitRequestIdle, MustWindowFullscreen is similar to WindowFullscreen, MustWindowMaximize is similar to WindowMaximize, MustWindowMinimize is similar to WindowMinimize, MustWindowNormal is similar to WindowNormal. // When eval on an element, "this" in the js is the current DOM element. When user press the mouse button down, a mousedown event is triggered, and when user release, a mouseup event is triggered. // If enabled the eval result will be a plain JSON value. r/golang: Ask questions and post articles about the Go programming language and related tools, events etc. Rod uses mouse cursor to simulate clicks, so if a button is moving because of animation, the click may not work as expected. You signed in with another tab or window. // This will trigger the search ajax request, // We want to make sure that after waiting, there are some autocomplete, // BrowserContextID is the id for incognito window, // contains filtered or unexported fields. the matched element. See the golang.org/x/mobile/app package for details on the event model. If device is devices.Clear, it will clear the override. Shows how we can further customize the browser with the launcher library. // Response gets the binary of the image as a []byte. I can get the click coordinates, but is there a way to tell *what* was clicked on, like a particular word in a sentence? WaitLoad waits for the `window.onload` event, it returns immediately if the event is already fired. Golang driver for ClickHouse Topics. MIT License Releases 25. v1.4.3: Merge pull request #284 from kua/new-settings Latest Aug 12, 2020 + 24 releases Packages 0. // each action, making it easier to inspect what your code is doing. GetDownloadFile of the next download url that matches the pattern, returns the file content. ElementR retries until an element in the page that matches one of the pairs, then returns // Pass parameters as json objects to the js function. Mouse represents the mouse on a page, it's always related the main frame, Click the button. // Or it will be passed as a plain JSON value. ElementByJS returns the element from the return value of the js function. And guess what, it actually did. they're used to gather information about the pages you visit and how many clicks you need to accomplish a task. Expose fn to the page's window object. GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together. download the GitHub extension for Visual Studio. Stateless components can be defined using the fat arrow syntax, which exclude the use of return keyword. // check the doc of EachEvent for details. If you want pages to share cookies with each remove the MustIncognito(), (b) Call(ctx, sessionID, methodName, params), (el) Call(ctx, sessionID, methodName, params), (p) Call(ctx, sessionID, methodName, params), (p) GetDownloadFile(pattern, resourceType, client), (p) MustSetViewport(width, height, deviceScaleFactor, mobile), (p) MustSetWindow(left, top, width, height), (p) Overlay(left, top, width, height, msg), (p) WaitRequestIdle(d, includes, excludes), (rc) MustElementByJS(js, params, callback), (rc) MustElementR(selector, regex, callback), https://peter.sh/experiments/chromium-command-line-switches, https://chromedevtools.github.io/devtools-protocol, https://pkg.go.dev/github.com/go-rod/rod/lib/defaults, https://golang.org/pkg/regexp/#MustCompile, https://developers.google.com/web/tools/chrome-devtools/dom#search, func (b *Browser) Call(ctx context.Context, sessionID, methodName string, params interface{}) (res []byte, err error), func (b *Browser) CancelTimeout() *Browser, func (b *Browser) Client(c CDPClient) *Browser, func (b *Browser) Context(ctx context.Context) *Browser, func (b *Browser) ControlURL(url string) *Browser, func (b *Browser) DefaultDevice(d devices.Device, landscape bool) *Browser, func (b *Browser) DisableDomain(sessionID proto.TargetSessionID, req proto.Request) (restore func()), func (b *Browser) EachEvent(callbacks ...interface{}) (wait func()), func (b *Browser) EnableDomain(sessionID proto.TargetSessionID, req proto.Request) (restore func()), func (b *Browser) Event() <-chan *Message, func (b *Browser) GetContext() context.Context, func (b *Browser) GetCookies() ([]*proto.NetworkCookie, error), func (b *Browser) HandleAuth(username, password string) func() error, func (b *Browser) HijackRequests() *HijackRouter, func (b *Browser) IgnoreCertErrors(enable bool) error, func (b *Browser) Incognito() (*Browser, error), func (b *Browser) LoadState(sessionID proto.TargetSessionID, method proto.Request) (has bool), func (b *Browser) Logger(l utils.Logger) *Browser, func (b *Browser) Monitor(url string) *Browser, func (b *Browser) MustGetCookies() []*proto.NetworkCookie, func (b *Browser) MustHandleAuth(username, password string) (wait func()), func (b *Browser) MustIgnoreCertErrors(enable bool) *Browser, func (b *Browser) MustIncognito() *Browser, func (b *Browser) MustPage(url string) *Page, func (b *Browser) MustPageFromTargetID(targetID proto.TargetTargetID) *Page, func (b *Browser) MustSetCookies(cookies []*proto.NetworkCookie) *Browser, func (b *Browser) Page(opts proto.TargetCreateTarget) (p *Page, err error), func (b *Browser) PageFromSession(sessionID proto.TargetSessionID) *Page, func (b *Browser) PageFromTarget(targetID proto.TargetTargetID) (*Page, error), func (b *Browser) RemoveState(key interface{}), func (b *Browser) ServeMonitor(host string) string, func (b *Browser) SetCookies(cookies []*proto.NetworkCookieParam) error, func (b *Browser) Sleeper(sleeper func() utils.Sleeper) *Browser, func (b *Browser) SlowMotion(delay time.Duration) *Browser, func (b *Browser) Timeout(d time.Duration) *Browser, func (b *Browser) Trace(enable bool) *Browser, func (b *Browser) WaitEvent(e proto.Event) (wait func()), func (b *Browser) WithCancel() (*Browser, func()), func (el *Element) Attribute(name string) (*string, error), func (el *Element) BackgroundImage() ([]byte, error), func (el *Element) Call(ctx context.Context, sessionID, methodName string, params interface{}) (res []byte, err error), func (el *Element) CancelTimeout() *Element, func (el *Element) CanvasToImage(format string, quality float64) ([]byte, error), func (el *Element) Click(button proto.InputMouseButton) error, func (el *Element) ContainsElement(target *Element) (bool, error), func (el *Element) Context(ctx context.Context) *Element, func (el *Element) Describe(depth int, pierce bool) (*proto.DOMNode, error), func (el *Element) Element(selectors ...string) (*Element, error), func (el *Element) ElementByJS(opts *EvalOptions) (*Element, error), func (el *Element) ElementR(pairs ...string) (*Element, error), func (el *Element) ElementX(xPaths ...string) (*Element, error), func (el *Element) Elements(selector string) (Elements, error), func (el *Element) ElementsByJS(opts *EvalOptions) (Elements, error), func (el *Element) ElementsX(xpath string) (Elements, error), func (el *Element) Eval(js string, params ...interface{}) (*proto.RuntimeRemoteObject, error), func (el *Element) Evaluate(opts *EvalOptions) (*proto.RuntimeRemoteObject, error), func (el *Element) Frame() (*Page, error), func (el *Element) GetContext() context.Context, func (el *Element) GetSessionID() proto.TargetSessionID, func (el *Element) HTML() (string, error), func (el *Element) Has(selector string) (bool, *Element, error), func (el *Element) HasR(selector, regex string) (bool, *Element, error), func (el *Element) HasX(selector string) (bool, *Element, error), func (el *Element) Input(text string) error, func (el *Element) Interactable() (pt *proto.Point, err error), func (el *Element) Matches(selector string) (bool, error), func (el *Element) MustAttribute(name string) *string, func (el *Element) MustBackgroundImage() []byte, func (el *Element) MustCanvasToImage() []byte, func (el *Element) MustContainsElement(target *Element) bool, func (el *Element) MustDescribe() *proto.DOMNode, func (el *Element) MustElement(selector string) *Element, func (el *Element) MustElementByJS(js string, params ...interface{}) *Element, func (el *Element) MustElementR(selector, regex string) *Element, func (el *Element) MustElementX(xpath string) *Element, func (el *Element) MustElements(selector string) Elements, func (el *Element) MustElementsByJS(js string, params ...interface{}) Elements, func (el *Element) MustElementsX(xpath string) Elements, func (el *Element) MustEval(js string, params ...interface{}) gson.JSON, func (el *Element) MustHas(selector string) bool, func (el *Element) MustHasR(selector, regex string) bool, func (el *Element) MustHasX(selector string) bool, func (el *Element) MustInput(text string) *Element, func (el *Element) MustInteractable() bool, func (el *Element) MustMatches(selector string) bool, func (el *Element) MustNodeID() proto.DOMNodeID, func (el *Element) MustParents(selector string) Elements, func (el *Element) MustPress(key rune) *Element, func (el *Element) MustPrevious() *Element, func (el *Element) MustProperty(name string) gson.JSON, func (el *Element) MustScreenshot(toFile ...string) []byte, func (el *Element) MustScrollIntoView() *Element, func (el *Element) MustSelect(selectors ...string) *Element, func (el *Element) MustSelectAllText() *Element, func (el *Element) MustSelectText(regex string) *Element, func (el *Element) MustSetFiles(paths ...string) *Element, func (el *Element) MustShadowRoot() *Element, func (el *Element) MustShape() *proto.DOMGetContentQuadsResult, func (el *Element) MustWait(js string, params ...interface{}) *Element, func (el *Element) MustWaitInvisible() *Element, func (el *Element) MustWaitLoad() *Element, func (el *Element) MustWaitStable() *Element, func (el *Element) MustWaitVisible() *Element, func (el *Element) Next() (*Element, error), func (el *Element) NodeID() (proto.DOMNodeID, error), func (el *Element) Parent() (*Element, error), func (el *Element) Parents(selector string) (Elements, error), func (el *Element) Previous() (*Element, error), func (el *Element) Property(name string) (gson.JSON, error), func (el *Element) Resource() ([]byte, error), func (el *Element) Screenshot(format proto.PageCaptureScreenshotFormat, quality int) ([]byte, error), func (el *Element) ScrollIntoView() error, func (el *Element) Select(selectors []string, selected bool, t SelectorType) error, func (el *Element) SelectText(regex string) error, func (el *Element) SetFiles(paths []string) error, func (el *Element) ShadowRoot() (*Element, error), func (el *Element) Shape() (*proto.DOMGetContentQuadsResult, error), func (el *Element) Sleeper(sleeper func() utils.Sleeper) *Element, func (el *Element) Text() (string, error), func (el *Element) Timeout(d time.Duration) *Element, func (el *Element) Trace(msg string) (removeOverlay func()), func (el *Element) Visible() (bool, error), func (el *Element) Wait(opts *EvalOptions) error, func (el *Element) WaitStable(d time.Duration) error, func (el *Element) WithCancel() (*Element, func()), func (e *ErrElementNotFound) Error() string, func (e *ErrExpectElement) Error() string, func (e *ErrExpectElement) Is(err error) bool, func (e *ErrExpectElements) Error() string, func (e *ErrExpectElements) Is(err error) bool, func (e *ErrInvisibleShape) Error() string, func (e *ErrInvisibleShape) Unwrap() error, func (e *ErrNavigation) Is(err error) bool, func (e *ErrNotInteractable) Error() string, func (e *ErrObjectNotFound) Error() string, func (e *ErrObjectNotFound) Is(err error) bool, func (e *ErrPageCloseCanceled) Error() string, func Eval(js string, args ...interface{}) *EvalOptions, func (e *EvalOptions) ByObject() *EvalOptions, func (e *EvalOptions) ByPromise() *EvalOptions, func (e *EvalOptions) ByUser() *EvalOptions, func (e *EvalOptions) Strings(list ...string) *EvalOptions, func (e *EvalOptions) This(obj *proto.RuntimeRemoteObject) *EvalOptions, func (h *Hijack) ContinueRequest(cq *proto.FetchContinueRequest), func (h *Hijack) LoadResponse(client *http.Client, loadBody bool) error, func (ctx *HijackRequest) Header(key string) string, func (ctx *HijackRequest) Headers() proto.NetworkHeaders, func (ctx *HijackRequest) JSONBody() gson.JSON, func (ctx *HijackRequest) Method() string, func (ctx *HijackRequest) Req() *http.Request, func (ctx *HijackRequest) SetBody(obj interface{}) *HijackRequest, func (ctx *HijackRequest) SetContext(c context.Context) *HijackRequest, func (ctx *HijackRequest) Type() proto.NetworkResourceType, func (ctx *HijackResponse) Fail(reason proto.NetworkErrorReason) *HijackResponse, func (ctx *HijackResponse) Headers() http.Header, func (ctx *HijackResponse) Payload() *proto.FetchFulfillRequest, func (ctx *HijackResponse) SetBody(obj interface{}) *HijackResponse, func (ctx *HijackResponse) SetHeader(pairs ...string) *HijackResponse, func (r *HijackRouter) Add(pattern string, resourceType proto.NetworkResourceType, handler func(*Hijack)) error, func (r *HijackRouter) MustAdd(pattern string, handler func(*Hijack)) *HijackRouter, func (r *HijackRouter) MustRemove(pattern string) *HijackRouter, func (r *HijackRouter) Remove(pattern string) error, func (k *Keyboard) InsertText(text string) error, func (k *Keyboard) MustDown(key rune) *Keyboard, func (k *Keyboard) MustInsertText(text string) *Keyboard, func (k *Keyboard) MustPress(key rune) *Keyboard, func (k *Keyboard) MustUp(key rune) *Keyboard, func (msg *Message) Load(e proto.Event) bool, func (m *Mouse) Click(button proto.InputMouseButton) error, func (m *Mouse) Down(button proto.InputMouseButton, clicks int) error, func (m *Mouse) Move(x, y float64, steps int) error, func (m *Mouse) MustClick(button proto.InputMouseButton) *Mouse, func (m *Mouse) MustDown(button proto.InputMouseButton) *Mouse, func (m *Mouse) MustMove(x, y float64) *Mouse, func (m *Mouse) MustScroll(x, y float64) *Mouse, func (m *Mouse) MustUp(button proto.InputMouseButton) *Mouse, func (m *Mouse) Scroll(offsetX, offsetY float64, steps int) error, func (m *Mouse) Up(button proto.InputMouseButton, clicks int) error, func (p *Page) AddScriptTag(url, content string) error, func (p *Page) AddStyleTag(url, content string) error, func (p *Page) Call(ctx context.Context, sessionID, methodName string, params interface{}) (res []byte, err error), func (p *Page) Context(ctx context.Context) *Page, func (p *Page) Cookies(urls []string) ([]*proto.NetworkCookie, error), func (p *Page) DisableDomain(method proto.Request) (restore func()), func (p *Page) EachEvent(callbacks ...interface{}) (wait func()), func (p *Page) Element(selectors ...string) (*Element, error), func (p *Page) ElementByJS(opts *EvalOptions) (*Element, error), func (p *Page) ElementFromNode(id proto.DOMNodeID) (*Element, error), func (p *Page) ElementFromObject(obj *proto.RuntimeRemoteObject) *Element, func (p *Page) ElementFromPoint(x, y int) (*Element, error), func (p *Page) ElementR(pairs ...string) (*Element, error), func (p *Page) ElementX(xPaths ...string) (*Element, error), func (p *Page) Elements(selector string) (Elements, error), func (p *Page) ElementsByJS(opts *EvalOptions) (Elements, error), func (p *Page) ElementsX(xpath string) (Elements, error), func (p *Page) Emulate(device devices.Device, landscape bool) error, func (p *Page) EnableDomain(method proto.Request) (restore func()), func (p *Page) Eval(js string, jsArgs ...interface{}) (*proto.RuntimeRemoteObject, error), func (p *Page) EvalOnNewDocument(js string) (remove func() error, err error), func (p *Page) Evaluate(opts *EvalOptions) (res *proto.RuntimeRemoteObject, err error), func (p *Page) Expose(name string, fn func(gson.JSON) (interface{}, error)) (stop func() error, err error), func (p *Page) GetContext() context.Context, func (p *Page) GetDownloadFile(pattern string, resourceType proto.NetworkResourceType, client *http.Client) func() (http.Header, []byte, error), func (p *Page) GetResource(url string) ([]byte, error), func (p *Page) GetSessionID() proto.TargetSessionID, func (p *Page) GetWindow() (*proto.BrowserBounds, error), func (p *Page) HandleDialog(accept bool, promptText string) func() error, func (p *Page) Has(selectors ...string) (bool, *Element, error), func (p *Page) HasR(selector, regex string) (bool, *Element, error), func (p *Page) HasX(selectors ...string) (bool, *Element, error), func (p *Page) HijackRequests() *HijackRouter, func (p *Page) Info() (*proto.TargetTargetInfo, error), func (p *Page) LoadState(method proto.Request) (has bool), func (p *Page) MustAddScriptTag(url string) *Page, func (p *Page) MustAddStyleTag(url string) *Page, func (p *Page) MustCookies(urls ...string) []*proto.NetworkCookie, func (p *Page) MustElement(selectors ...string) *Element, func (p *Page) MustElementByJS(js string, params ...interface{}) *Element, func (p *Page) MustElementFromNode(id proto.DOMNodeID) *Element, func (p *Page) MustElementFromPoint(left, top int) *Element, func (p *Page) MustElementR(pairs ...string) *Element, func (p *Page) MustElementX(xPaths ...string) *Element, func (p *Page) MustElements(selector string) Elements, func (p *Page) MustElementsByJS(js string, params ...interface{}) Elements, func (p *Page) MustElementsX(xpath string) Elements, func (p *Page) MustEmulate(device devices.Device) *Page, func (p *Page) MustEval(js string, params ...interface{}) gson.JSON, func (p *Page) MustEvalOnNewDocument(js string), func (p *Page) MustEvaluate(opts *EvalOptions) *proto.RuntimeRemoteObject, func (p *Page) MustExpose(name string, fn func(gson.JSON) (interface{}, error)) (stop func()), func (p *Page) MustGetDownloadFile(pattern string) func() []byte, func (p *Page) MustGetWindow() *proto.BrowserBounds, func (p *Page) MustHandleDialog(accept bool, promptText string) (wait func()), func (p *Page) MustHas(selector string) bool, func (p *Page) MustHasR(selector, regex string) bool, func (p *Page) MustHasX(selector string) bool, func (p *Page) MustInfo() *proto.TargetTargetInfo, func (p *Page) MustNavigate(url string) *Page, func (p *Page) MustNavigateForward() *Page, func (p *Page) MustObjectToJSON(obj *proto.RuntimeRemoteObject) gson.JSON, func (p *Page) MustObjectsToJSON(list []*proto.RuntimeRemoteObject) gson.JSON, func (p *Page) MustPDF(toFile ...string) []byte, func (p *Page) MustRelease(obj *proto.RuntimeRemoteObject) *Page, func (p *Page) MustScreenshot(toFile ...string) []byte, func (p *Page) MustScreenshotFullPage(toFile ...string) []byte, func (p *Page) MustSearch(queries ...string) *Element, func (p *Page) MustSetCookies(cookies ...*proto.NetworkCookieParam) *Page, func (p *Page) MustSetExtraHeaders(dict ...string) (cleanup func()), func (p *Page) MustSetUserAgent(req *proto.NetworkSetUserAgentOverride) *Page, func (p *Page) MustSetViewport(width, height int, deviceScaleFactor float64, mobile bool) *Page, func (p *Page) MustSetWindow(left, top, width, height int) *Page, func (p *Page) MustWait(js string, params ...interface{}) *Page, func (p *Page) MustWaitNavigation() func(), func (p *Page) MustWaitOpen() (wait func() (newPage *Page)), func (p *Page) MustWaitPauseOpen() (wait func() (p *Page, resume func())), func (p *Page) MustWaitRequestIdle(excludes ...string) (wait func()), func (p *Page) MustWindowFullscreen() *Page, func (p *Page) MustWindowMaximize() *Page, func (p *Page) MustWindowMinimize() *Page, func (p *Page) Navigate(url string) error, func (p *Page) ObjectToJSON(obj *proto.RuntimeRemoteObject) (gson.JSON, error), func (p *Page) Overlay(left, top, width, height float64, msg string) (remove func()), func (p *Page) PDF(req *proto.PagePrintToPDF) (*StreamReader, error), func (p *Page) Release(obj *proto.RuntimeRemoteObject) error, func (p *Page) Screenshot(fullpage bool, req *proto.PageCaptureScreenshot) ([]byte, error), func (p *Page) Search(from, to int, queries ...string) (Elements, error), func (p *Page) SetCookies(cookies []*proto.NetworkCookieParam) error, func (p *Page) SetExtraHeaders(dict []string) (func(), error), func (p *Page) SetUserAgent(req *proto.NetworkSetUserAgentOverride) error, func (p *Page) SetViewport(params *proto.EmulationSetDeviceMetricsOverride) error, func (p *Page) SetWindow(bounds *proto.BrowserBounds) error, func (p *Page) Sleeper(sleeper func() utils.Sleeper) *Page, func (p *Page) Timeout(d time.Duration) *Page, func (p *Page) Wait(this *proto.RuntimeRemoteObject, js string, params []interface{}) error, func (p *Page) WaitEvent(e proto.Event) (wait func()), func (p *Page) WaitIdle(timeout time.Duration) (err error), func (p *Page) WaitNavigation(name proto.PageLifecycleEventName) func(), func (p *Page) WaitOpen() func() (*Page, error), func (p *Page) WaitPauseOpen() (func() (*Page, func() error, error), error), func (p *Page) WaitRequestIdle(d time.Duration, includes, excludes []string) func(), func (p *Page) WithCancel() (*Page, func()), func (pp PagePool) Cleanup(iteratee func(*Page)), func (pp PagePool) Get(create func() *Page) *Page, func (ps Pages) Find(selector string) (*Page, error), func (ps Pages) FindByURL(regex string) (*Page, error), func (ps Pages) MustFind(selector string) *Page, func (ps Pages) MustFindByURL(regex string) *Page, func (rc *RaceContext) Element(selector string, callback func(*Element) error) *RaceContext, func (rc *RaceContext) ElementByJS(opts *EvalOptions, callback func(*Element) error) *RaceContext, func (rc *RaceContext) ElementR(selector, regex string, callback func(*Element) error) *RaceContext, func (rc *RaceContext) ElementX(selector string, callback func(*Element) error) *RaceContext, func (rc *RaceContext) MustElement(selector string, callback func(*Element)) *RaceContext, func (rc *RaceContext) MustElementByJS(js string, params []interface{}, callback func(*Element) error) *RaceContext, func (rc *RaceContext) MustElementR(selector, regex string, callback func(*Element)) *RaceContext, func (rc *RaceContext) MustElementX(selector string, callback func(*Element)) *RaceContext, func NewStreamReader(c proto.Client, h proto.IOStreamHandle) *StreamReader, func (sr *StreamReader) Read(p []byte) (n int, err error), func (t *Touch) Move(points ...*proto.InputTouchPoint) error, func (t *Touch) MustMove(points ...*proto.InputTouchPoint) *Touch, func (t *Touch) MustStart(points ...*proto.InputTouchPoint) *Touch, func (t *Touch) MustTap(x, y float64) *Touch, func (t *Touch) Start(points ...*proto.InputTouchPoint) error, https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication, https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL, https://chromedevtools.github.io/devtools-protocol/tot/Page#method-captureScreenshot, https://developer.mozilla.org/en-US/docs/Web/API/Touch_events.

Night Heat Episodes, Difference Between Vanda And Phalaenopsis, American Express Job Offer Letter, Western Fabric Joanns, Classifying Triangles Jeopardy Game, Bless Unleashed Capturing Animals, Artuk Bey Actor, Françoise Noguès Religion,